我是 haskell 的新手,并且在类型签名上苦苦挣扎。我正在研究单功能 Collatz 链生成器。我看过一些haskell collatz问题,但没有看到任何回答我试图回答的问题。我正在使用 GHCI。
这是我的功能:
collatz :: (Num a) => a -> [a]
collatz n
| n == 1 = [n]
| odd n = n : collatz (n * 3 + 1)
| even n = n : collatz (n / 2)
看起来这应该是直截了当的;它应该只是将新的转换附加到列表中。但是,解释器给了我这些错误:
collatz.hs:9:13:
Could not deduce (Eq a) arising from a use of `=='
from the context (Num a)
....
collatz.hs:10:11:
Could not deduce (Integral a) arising from a use of `odd'
from the context (Num a)
....
collatz.hs:11:36:
Could not deduce (Fractional a) arising from a use of `/'
from the context (Num a)
编译器告诉我使用的类型签名的每种组合似乎都失败了
collatz :: (Eq a, Num a) => a -> [a]
collatz :: (Integral a) => a -> [a]
collatz :: (Fractional a) => a -> [a]
我显然错过了一些基本的东西。谁能告诉我如何制作具有单一功能的 collatz 链?