31

別の質問では、コメントの 1 つが次のように述べています[Data.]TextStringText

を に変換する最も簡単な方法は何Data.TextですかInt? read関数は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 に答える