因此,我是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/

10-12 01:44
查看更多