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 forall a b. [(a, b)] -> Maybe a
readSToMaybe forall a b. (a -> b) -> a -> b
$ forall a. Real a => ReadS a -> ReadS a
readSigned forall a. (Eq a, Num a) => ReadS a
readDec String
s of
Just Integer
int -> Integer
int
Maybe Integer
Nothing -> forall a. (Num a, Eq a) => Boz -> a
bozAsNatural 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)]
_ -> forall a. a -> Maybe a
Just a
x
[(a, b)]
_ -> forall a. Maybe a
Nothing