我是Haskell的新成員。 我遇到了一個錯誤。代碼有點複雜,但我意識到它可以簡化如下。內容定義中的類型不匹配錯誤
import Data.Set (Set)
import qualified Data.Set as S
oA :: S.Set String
oA = S.empty
main::IO()
main = do
let oA = S.fromList["a1","a2","a3","a4","a5"]
print [ a | a <- oA ]
return()
這給了我一個錯誤,如下所示。
Module.hs:10:22:
Couldn't match expected type `[t0]' with actual type `Set [Char]'
In the expression: oA
In a stmt of a list comprehension: a <- oA
In the first argument of `print', namely `[a | a <- oA]'
我該如何解決問題? 從其他編程語言(如java)的意義上來說, [ Set [Char] a | a <- oA ]
可能會工作,但Haskell編譯器不接受此項。
問題是,在這一點上你不需要Set:'let oA = [「a1」,...]'然後'[a |一個< - oA]'將起作用 - 如果我猜測你正在努力達到的目標,我可以嘗試進一步幫助你 – Carsten
在你的常用列表中理解,'oA'也需要成爲一個列表,但是你做到了成爲一個錯誤發生的地方 – Carsten
有一個擴展使它與[monads too]一起工作(https://ghc.haskell.org/trac/ghc/wiki/MonadComprehensions),但是'Set'沒有monad (又一個小問題)... – Carsten