vformat-0.10.0.0: src/Text/Format/Error.hs
module Text.Format.Error
( ArgError(..)
, isArgKeyError
, catchArgError
, vferror
, errorNoParse
, errorCloseTag
, errorArgKey
, errorArgFmt
) where
import Control.Exception
-- | A data type indicates an arg error
data ArgError = ArgKeyError -- ^ Can not find argument for the given key
| ArgFmtError -- ^ The field format descriptor
-- does not match the argument
deriving (Show, Eq)
instance Exception ArgError
isArgKeyError :: SomeException -> Bool
isArgKeyError = maybe False (== ArgKeyError) . fromException
catchArgError :: a -> a -> SomeException -> a
catchArgError key fmt e = maybe (throw e) handle (fromException e)
where
handle ArgKeyError = key
handle ArgFmtError = fmt
--------------------------------------------------------------------------------
-- | Raises an error with a vformat-specific prefix on the message string.
vferror :: String -> a
vferror = errorWithoutStackTrace . ("vformat: " ++)
--------------------------------------------------------------------------------
-- *** Exception: vformat: no parse "xxx"
errorNoParse :: String -> a
errorNoParse = vferror . ("no parse " ++) . show
-- *** Exception: vformat: "xxx" close tag '}' missing
errorCloseTag :: String -> a
errorCloseTag = vferror . (++ " close tag '}' missing") . show
-- | Calls 'vferror' to indicate an arg key error for a given type.
errorArgKey :: String -> a
errorArgKey = vferror . ("bad arg key " ++) . show
-- | Calls 'vferror' to indicate an arg format error for a given type.
errorArgFmt :: String -> a
errorArgFmt = vferror . ("bad arg format " ++) . show