我正在新学习Haskell,并且在之前提出的类似问题的帮助下,我达到了以下代码,但是我收到了一个错误 -
Couldn't match type ' [ ] ' with ' IO '.
Expected type - IO Char
Actual type - [Char]
Run Code Online (Sandbox Code Playgroud)
import Data.Set
removeDups :: Ord a => [a] -> Set a -> [a]
removeDups [] sofar = []
removeDups (x:rest) sofar
| member x sofar = (removeDups rest sofar)
| otherwise = x:(removeDups rest (insert x sofar))
main = do
name <- getLine
removeDups name empty
Run Code Online (Sandbox Code Playgroud)
这里的问题是removeDups返回类型[a],但是当你在do块中调用一个函数时,它必须匹配该块的monadic类型do.在这种情况下,你在里面调用它main,它必须有类型IO (),所以编译器期望removeDups有类似的返回类型IO a,但它实际上是返回类型Ord a => [a].你可以改为做点什么
main = do
name <- getLine
let unique = removeDups name empty
print unique
Run Code Online (Sandbox Code Playgroud)
既然print有返回类型IO ().
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |