因此,我是Haskell的新手,问题不胜枚举。我一直在阅读一些书籍,并尝试自己做一些事情,有人可以向我解释为什么这抱怨字面量没有实现eq,我理解为什么eq是必要的-但我没有无法理解为什么将其视为文字而不是数字,或者如何更改。
generateListOfRandoms :: a -> b -> c -> d -> [(d, (a, b))]
generateListOfRandoms _ _ 0 _ = []
generateListOfRandoms rangeStart rangeEnd numberOfRandoms randGenerator =
(randGenerator, (rangeStart,rangeEnd)) : generateListOfRandoms rangeStart rangeEnd (numberOfRandoms-1) randGenerator
我敢肯定,当我尝试给它提供IO功能时,我的功能将以其他方式失败,正如您中某些人可能会猜到的那样,但是现在我很困惑为什么会出现此错误:
src\Main.hs:23:27:
No instance for (Eq c)
arising from the literal `0'
In the pattern: 0
In an equation for `generateListOfRandoms':
generateListOfRandoms _ _ 0 _ = []
最佳答案
如果使用数字文字,则相应参数的类型必须属于Num
类。另外,由于要与数字文字进行模式匹配,因此需要该类型属于Eq
类。您必须将这些约束添加到类型签名中,
generateListOfRandoms :: (Num c, Eq c) => a -> b -> c -> d -> [(d, (a, b))]
如果您未使用GHC-7.4,则
Eq
约束由Num
约束暗示,该约束最近已更改,因此,如果您同时使用这两个约束,则现在必须明确声明这两个约束。关于haskell - 我如何让我的文字成为Haskell中的数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10973514/