sdr-0.1.0.0: hs_sources/SDR/ArgUtils.hs
{-| Utilities for parsing command line arguments that might be useful when writing a SDR application. Uses the optparse-applicative library. -}
module SDR.ArgUtils (
parseSize
) where
import Options.Applicative
import Data.Decimal
{-| Parse a number that may have a decimal point and a suffix, e.g. 2.56M -}
parseSize :: ReadM Integer
parseSize = eitherReader $ \arg -> case reads arg of
[(r, suffix)] -> case suffix of
[] -> return $ round (r :: Decimal)
"K" -> return $ round $ r * 1000
"M" -> return $ round $ r * 1000000
"G" -> return $ round $ r * 1000000000
x -> Left $ "Cannot parse suffix: `" ++ x ++ "'"
_ -> Left $ "Cannot parse value: `" ++ arg ++ "'"