我是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