簡體   English   中英

沒有(Num [Int])的實例源自字面量“ 3”

[英]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類型起作用,需要exampleList3具有相同的類型。 由於數字常數在Haskell中是多態的,因此它說:

嗯,當有一種方法可以用數字文字組成列表時,此代碼有效。 我只需要找到正在使用的Num實例即可。 等等,沒有人。 錯誤時間!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM