packages feed

fortran-src-0.10.0: src/Language/Fortran/Parser/LexerUtils.hs

{-| Utils for both lexers. -}
module Language.Fortran.Parser.LexerUtils ( readIntOrBoz ) where

import Language.Fortran.AST.Literal.Boz
import Numeric

-- | Read a string as either a signed integer, or a BOZ constant (positive).
--
-- Useful in manual lexing.
readIntOrBoz :: String -> Integer
readIntOrBoz s = do
    case readSToMaybe $ readSigned readDec s of
      Just int -> int
      Nothing  -> bozAsNatural $ parseBoz s

readSToMaybe :: [(a, b)] -> Maybe a
readSToMaybe = \case (x, _):_ -> Just x
                     _        -> Nothing