没有(Num [Int])的实例来自字面上的'3'

时间:2015-12-29 23:56:55

标签: haskell

我今天开始学习Haskell。我知道C ++的一些基础知识,C#,但我是初学程序员。

我在文件" file.hs":

中写了以下内容
exampleList = [1, 2, 3, 4]
exRange2 = [2*x | x <- [exampleList], (x `mod` 3) /= 1]

当我输入

:l file

进入我的GHCi控制台,它给了我错误:

functions1.hs:20:47:
    No instance for (Num [Int]) arising from the literal `3'
    In the second argument of `mod', namely `3'
    In the first argument of `(/=)', namely `(x `mod` 3)'
    In the expression: (x `mod` 3) /= 1
Failed, modules loaded: none

请注意,它可以互换使用gravises和撇号。我不明白什么是错的。

我对谷歌的快速游览使我确信这是mod的两个参数类型的问题,但编译器应该知道如果它定义了exampleList,那么所有x都将是整数?

1 个答案:

答案 0 :(得分:4)

注意:代码或错误的屏幕截图很糟糕。复制并粘贴文本。

简短回答:exampleList已经是一个列表。通过将其放入[],您可以将其列为列表。不要那样做。

答案很长:GHC尽可能努力地理解你写的内容。需要exampleList3才能使mod的类型具有相同的类型。由于数值常量在Haskell中是多态的,因此它表示:

  

啊,当有一种方法可以从数字中创建列表时,此代码可以正常工作   文字。我只需要找到正在使用的Num实例。等待,   没有一个。错误时间!