我刚开始使用“Learn You a Haskell for Great Good”这本书开始学习 Haskell,并阅读了第 9 章“输入和输出”。但是当我尝试一个例子时,我遇到了一些奇怪的问题,大致可以描述为三个步骤。
1)书中的示例代码是
finiteRandoms :: (RandomGen g, Random a, Num n) => n -> g -> ([a], g)
finiteRandoms 0 gen = ([], gen)
finiteRandoms n gen =
let (value, newGen) = random gen
(restOfList, finalGen) = finiteRandoms (n-1) newGen
in (value:restOfList, finalGen)
Run Code Online (Sandbox Code Playgroud)
但这无法编译。错误信息是
/Users/learn_haskell/randomness.hs:12:15:
Could not deduce (Eq n) arising from the literal `0'
from the context (RandomGen g, Random a, Num n)
bound by the type signature for
finiteRandoms …Run Code Online (Sandbox Code Playgroud)