将IO [String]转换为String

时间:2014-10-18 13:46:23

标签: haskell

我浏览了页面卷曲的内容。找到正确的数据并在其基础上形成以下查询。 但数据类型为IO [String]。简单地请求String。 如何将IO [String]转换为String

3 个答案:

答案 0 :(得分:5)

没办法。你能得到什么只有IO String

了解这些related questions以了解原因。

答案 1 :(得分:0)

这是邪恶的(你没有从我这里听到这个消息!)但是:unsafePerformIO

我只是谈论类型系统。如果您想使用它,请仔细阅读文档 ! 顾名思义,这是不安全的,这意味着你可以更加确定你的使用是否合理。

答案 2 :(得分:0)

您可以使用unsafePerformIO(其类型为IO a -> a,因此不纯),但这几乎肯定不是您想要的。相反,您可以使用fmap>>=对字符串执行操作:

f :: String -> Int
f = read

io :: IO String
io = getLine

main :: IO ()
main = (f `fmap` io) >>= \x -> print x

对于某些fmap>>=IO a的结果当然始终是a,以保持参照透明度。