hformat-0.3.0.0: src/Text/Format/Flags.hs
module Text.Format.Flags (
FormatFlags,
getFlag, hasFlag,
baseFlag, preciseFlag
) where
import Prelude.Unicode
import Control.Applicative
import Data.List (stripPrefix)
import Data.Maybe (listToMaybe, mapMaybe, fromMaybe)
import Text.Read
type FormatFlags = [String]
getFlag ∷ (String → Maybe a) → [String] → Maybe a
getFlag fn = listToMaybe ∘ mapMaybe fn
hasFlag ∷ String → [String] → Bool
hasFlag = (∈)
getFlagValue ∷ Read a ⇒ String → [String] → Maybe a
getFlagValue nm fmts = do
f ← getFlag (stripPrefix (nm ++ "=")) fmts
readMaybe f
baseFlag ∷ (Read a, Integral a) ⇒ [String] → a
baseFlag fmts
| hasFlag "bin" fmts ∨ hasFlag "b" fmts = 2
| hasFlag "octal" fmts ∨ hasFlag "o" fmts = 8
| hasFlag "hex" fmts ∨ hasFlag "h" fmts = 16
| otherwise = fromMaybe 10 (getFlagValue "base" fmts <|> getFlagValue "b" fmts)
preciseFlag ∷ [String] → Maybe Int
preciseFlag fmts = read <$> listToMaybe (mapMaybe preciseFlag' fmts) where
preciseFlag' ('d':d) = Just d
preciseFlag' _ = Nothing