Haskell从String读取内容并返回String类型和其余部分

时间:2017-11-03 15:20:39

标签: haskell

所以我知道我可以解析字符串s中的内容,如下所示:

read s :: Int

但这仅在字符串是您正在阅读的整个类型时才有效。我实际上希望能够读取相同类型的流并创建一个列表但是我找不到任何类型的

Read a => String -> (a, String)

或类似的东西。基本上我希望能够像readSeries "5 6 7"那样获得[5, 6, 7],我认为最简单的就是如果我能得到一些东西来返回字符串的其余部分。

1 个答案:

答案 0 :(得分:6)

您可以使用reads

> (reads :: ReadS Int) "5 6 7"
[(5," 6 7")]

您也可以合并wordsread,但它会很脆弱 - 例如如果任何值中有空格,这将以有趣的方式打破。

Text.Read> mapM readMaybe (words "5 6 7") :: Maybe [Int] -- safer
Just [5,6,7]
> map read (words "5 6 7") :: [Int] -- more convenient
[5,6,7]

这些最后一个由于值中的空格而中断的示例,而reads解决方案正常工作:

> (reads :: ReadS (Maybe Int)) "Just 5 Just 6 Just 7"
[(Just 5," Just 6 Just 7")]
Text.Read> mapM readMaybe (words "Just 5 Just 6 Just 7") :: Maybe [Maybe Int]
Nothing