我今天开始学习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
都将是整数?
答案 0 :(得分:4)
注意:代码或错误的屏幕截图很糟糕。复制并粘贴文本。
简短回答:exampleList
已经是一个列表。通过将其放入[]
,您可以将其列为列表。不要那样做。
答案很长:GHC尽可能努力地理解你写的内容。需要exampleList
和3
才能使mod
的类型具有相同的类型。由于数值常量在Haskell中是多态的,因此它表示:
啊,当有一种方法可以从数字中创建列表时,此代码可以正常工作 文字。我只需要找到正在使用的
Num
实例。等待, 没有一个。错误时间!