Подтвердить что ты не робот

Преобразование Data.Text в Int в Haskell

В еще один вопрос, говорится в одном из комментариев: "[Data.]Text становится фактической текстовой реализацией. String по-прежнему существует по наследственным причинам и для простых вещей, но для серьезных текстовых манипуляций вы должны использовать Text."

Каков самый простой способ преобразования Data.Text в Int? read не будет работать, потому что функция read всегда принимает String.

Лучшее, что я могу придумать, это:

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

Есть ли лучший способ?

4b9b3361

Ответ 1

Посмотрев пакет 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"

Ответ 2

Другими словами, вам нужен синтаксический анализатор, который может потреблять Text. Есть много парсеров по хакеру, которые могут потреблять текст, я предлагаю вам попробовать attoparsec.

import Data.Attoparsec.Text
parseInt = parseOnly (signed decimal)