Поскольку другие объяснили, в чем проблема, я подумал, что объясню, как вы могли бы выяснить это самостоятельно. (Учить человека ловить рыбу и так далее ...)
Обратите внимание на эту часть сообщения об ошибке:
В первом аргументе '($)', а именно: n: collatz '
Это ключ к тому, чтобы заметить, что это проблема приоритета. GHC сообщает вам, что n : collatz'
был проанализирован как первый аргумент $
, в то время как вы ожидали, что первый аргумент будет просто collatz'
.
В этот момент я обычно запускаю GHCi и проверяю соответствующие приоритеты с помощью команды :info
:
> :info :
data [] a = ... | a : [a] -- Defined in GHC.Types
infixr 5 :
> :info $
($) :: (a -> b) -> a -> b -- Defined in GHC.Base
infixr 0 $
В нем говорится, что приоритет :
равен 5, а приоритет $
равен 0, что объясняет, почему :
является обязательным "более жестким", чем $
.