2012-01-25 130 views
0

我尝试使用haskell中的splitOn函数根据某些分隔符分割字符串。因此,splitOn函数返回类型为[[Char]]的数据,但编译器显示错误,说预期类型为IO a推断类型与预期类型(IO a)与splitOn不匹配

中的哪一个失败的代码行是:

splitOn "x" "1 2, 3" 

请建议。

回答

4

如果您已经编写了类似xs <- splitOn "x" line的文件,并且只需要将名称绑定到splitOn "x" line,那么您可以使用let xs = splitOn "x" line<-用于绑定来自IO操作的值,而不是将名称分配给纯值。

否则,你可能做这样的事情:

main = do 
    line <- getLine 
    splitOn "x" line 

您使用的是[String],但你需要一个IO动作。你需要东西与纯粹的结果,你必须把它变成一个IO计算。

你可以将清单打印出来,作为GHCI会:

print :: (Show a) => a -> IO() 

或者你可以使用return,如果你只是想要回纯计算其他IO操作使用:

return :: a -> IO a 

这一切都取决于你想如何处理数据。

+0

嘿..感谢很多....其实我是在做第二个错误,你说 – code4fun

+0

你能告诉我如何打印这个list.its a [[char]]。我将它存储为let xs = splitOn“x”line谢谢 – code4fun

+0

@guarav:那么,这取决于你想要结果如何。如果你想在不同的行上使用列表中的元素,你可以使用'putStr(unlines xs)'('unlines'与'lines'相反,即需要'[String]',在元素之间插入'\ n'然后将其平整为'String')或'mapM_ putStrLn xs';如果你想打印它作为一个列表(即'[“Hello”,“world”]'),你可以使用'print xs'。 – Vitus

相关问题