{-# LANGUAGE OverloadedStrings #-} module Codec.Xlsx.Parser.Internal.Util ( boolean , decimal , rational ) where import Data.Text (Text) import qualified Data.Text as T import qualified Data.Text.Read as T decimal :: (Monad m, Integral a) => Text -> m a decimal t = case T.signed T.decimal $ t of Right (d, leftover) | T.null leftover -> return d _ -> fail $ "invalid decimal" ++ show t rational :: Monad m => Text -> m Double rational t = case T.signed T.rational t of Right (r, leftover) | T.null leftover -> return r _ -> fail $ "invalid rational: " ++ show t boolean :: Monad m => Text -> m Bool boolean t = case T.strip t of "true" -> return True "false" -> return False _ -> fail $ "invalid boolean: " ++ show t