0
我尝试使用haskell中的splitOn
函数根据某些分隔符分割字符串。因此,splitOn函数返回类型为[[Char]]
的数据,但编译器显示错误,说预期类型为IO a
。推断类型与预期类型(IO a)与splitOn不匹配
中的哪一个失败的代码行是:
splitOn "x" "1 2, 3"
请建议。
我尝试使用haskell中的splitOn
函数根据某些分隔符分割字符串。因此,splitOn函数返回类型为[[Char]]
的数据,但编译器显示错误,说预期类型为IO a
。推断类型与预期类型(IO a)与splitOn不匹配
中的哪一个失败的代码行是:
splitOn "x" "1 2, 3"
请建议。
如果您已经编写了类似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
这一切都取决于你想如何处理数据。
嘿..感谢很多....其实我是在做第二个错误,你说 – code4fun
你能告诉我如何打印这个list.its a [[char]]。我将它存储为let xs = splitOn“x”line谢谢 – code4fun
@guarav:那么,这取决于你想要结果如何。如果你想在不同的行上使用列表中的元素,你可以使用'putStr(unlines xs)'('unlines'与'lines'相反,即需要'[String]',在元素之间插入'\ n'然后将其平整为'String')或'mapM_ putStrLn xs';如果你想打印它作为一个列表(即'[“Hello”,“world”]'),你可以使用'print xs'。 – Vitus