Ответ 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"
В еще один вопрос, говорится в одном из комментариев: "[Data.]Text
становится фактической текстовой реализацией. String
по-прежнему существует по наследственным причинам и для простых вещей, но для серьезных текстовых манипуляций вы должны использовать Text
."
Каков самый простой способ преобразования Data.Text
в Int
? read
не будет работать, потому что функция read
всегда принимает String
.
Лучшее, что я могу придумать, это:
let fortyTwo = Data.Text.pack "42"
read $ Data.Text.unpack fortyTwo :: Int
Есть ли лучший способ?
Посмотрев пакет 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"
Другими словами, вам нужен синтаксический анализатор, который может потреблять Text
. Есть много парсеров по хакеру, которые могут потреблять текст, я предлагаю вам попробовать attoparsec.
import Data.Attoparsec.Text
parseInt = parseOnly (signed decimal)