diff options
Diffstat (limited to 'src/compiler/GF/Data/ErrM.hs')
| -rw-r--r-- | src/compiler/GF/Data/ErrM.hs | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/compiler/GF/Data/ErrM.hs b/src/compiler/GF/Data/ErrM.hs index d687a70a5..033c1efac 100644 --- a/src/compiler/GF/Data/ErrM.hs +++ b/src/compiler/GF/Data/ErrM.hs @@ -12,15 +12,25 @@ -- hack for BNFC generated files. AR 21/9/2003 ----------------------------------------------------------------------------- -module GF.Data.ErrM (Err(..)) where +module GF.Data.ErrM where import Control.Monad (MonadPlus(..),ap) import Control.Applicative --- | like @Maybe@ type with error msgs +-- | Like 'Maybe' type with error msgs data Err a = Ok a | Bad String deriving (Read, Show, Eq) +-- | Analogue of 'maybe' +err :: (String -> b) -> (a -> b) -> Err a -> b +err d f e = case e of + Ok a -> f a + Bad s -> d s + +-- | Analogue of 'fromMaybe' +fromErr :: a -> Err a -> a +fromErr a = err (const a) id + instance Monad Err where return = Ok fail = Bad |
