[英]No instance for (Num (Int -> Int)) arising from the literal `5'
[英]No instance for (Num[Int]) arising from the literal `3'
我今天開始學習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
請注意,它看起來像可互換地使用重力和撇號。 我不明白怎么了
我對Google的快速瀏覽使我確信這是mod兩個參數類型的問題,但是如果編譯器定義了exampleList,編譯器是否應該不知道所有x
都將是整數?
注意:代碼或錯誤的屏幕截圖不正確。 復制並粘貼文本。
簡短的答案: exampleList
已經是一個列表。 通過將其放在[]
,可以使其成為列表列表。 不要那樣做
長答案:GHC會盡最大努力弄清您寫的內容。 exampleList
mod
類型起作用,需要exampleList
和3
具有相同的類型。 由於數字常數在Haskell中是多態的,因此它說:
嗯,當有一種方法可以用數字文字組成列表時,此代碼有效。 我只需要找到正在使用的
Num
實例即可。 等等,沒有人。 錯誤時間!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.