{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE ScopedTypeVariables #-}
module DSV.Text
( Text
, stringToText, textToString
, textNull, textStripPrefix
, TextReader, textReadMaybe, textReadRational, textReadDecimal
) where
import DSV.Numbers
import DSV.Prelude
import Data.Text (Text)
import qualified Data.Text
import qualified Data.Text.Read
stringToText :: String -> Text
stringToText = Data.Text.pack
textToString :: Text -> String
textToString = Data.Text.unpack
textNull :: Text -> Bool
textNull = Data.Text.null
textStripPrefix :: Text -> Text -> Maybe Text
textStripPrefix = Data.Text.stripPrefix
type TextReader a = Data.Text.Read.Reader a
textReadMaybe ::
forall a .
TextReader a -> Text -> Maybe a
textReadMaybe f t =
case f t of
Right (x, r) | textNull r -> Just x
_ -> Nothing
textReadRational :: TextReader Rational
textReadRational = Data.Text.Read.rational
textReadDecimal :: TextReader Natural
textReadDecimal = Data.Text.Read.decimal