31

另一个问题中,其中一条评论说,“[Data.]Text正在成为事实上的文本实现。String由于遗留原因和简单的事情仍然存在,但对于严重的文本操作,你应该使用Text。”

将 a 转换为 a 的最简单方法是Data.Text什么Intread将不起作用,因为该read函数总是需要一个String.

我能想到的最好的是:

let fortyTwo = Data.Text.pack "42"
read $ Data.Text.unpack fortyTwo :: Int

有没有更好的办法?

4

2 回答 2

26

查看text我看到一个名为Data.Text.Read. 它似乎工作:

λ> decimal (T.pack "99 bottles")
Right (99," bottles")
λ> decimal (T.pack "a digit")
Left "input does not start with a digit"
于 2013-01-12T19:22:02.993 回答
15

换句话说,您需要一个可以使用的解析器Text。hackage上有很多可以消费Text的解析器,我建议你试试attoparsec

import Data.Attoparsec.Text
parseInt = parseOnly (signed decimal)
于 2013-01-12T19:21:19.630 回答