Prelude> let myprint = putStrLn . show
Prelude> :t myprint
myprint :: () -> IO ()
Хорошо, здесь нет ничего необычного. Просто правила GHCi по умолчанию, я думаю...
Prelude> let myprint = (putStrLn . show) :: Show x => x -> IO ()
Prelude> :t myprint
myprint :: () -> IO ()
Какое колдовство это? Вы просто игнорируете мое объявление типа? О_О
Есть ли способ убедить GHCi делать то, что я на самом деле намеревался сделать?