module Language.Fortran.Parser.LexerUtils ( readIntOrBoz ) where
import Language.Fortran.AST.Literal.Boz
import Numeric
readIntOrBoz :: String -> Integer
readIntOrBoz :: String -> Integer
readIntOrBoz String
s = do
case [(Integer, String)] -> Maybe Integer
forall a b. [(a, b)] -> Maybe a
readSToMaybe ([(Integer, String)] -> Maybe Integer)
-> [(Integer, String)] -> Maybe Integer
forall a b. (a -> b) -> a -> b
$ ReadS Integer -> ReadS Integer
forall a. Real a => ReadS a -> ReadS a
readSigned ReadS Integer
forall a. (Eq a, Num a) => ReadS a
readDec String
s of
Just Integer
int -> Integer
int
Maybe Integer
Nothing -> Boz -> Integer
forall a. (Num a, Eq a) => Boz -> a
bozAsNatural (Boz -> Integer) -> Boz -> Integer
forall a b. (a -> b) -> a -> b
$ String -> Boz
parseBoz String
s
readSToMaybe :: [(a, b)] -> Maybe a
readSToMaybe :: forall a b. [(a, b)] -> Maybe a
readSToMaybe = \case (a
x, b
_):[(a, b)]
_ -> a -> Maybe a
forall a. a -> Maybe a
Just a
x
[(a, b)]
_ -> Maybe a
forall a. Maybe a
Nothing