clafer-0.3.5: src/Language/Clafer/Front/ErrM.hs
-- BNF Converter: Error Monad
-- Copyright (C) 2004 Author: Aarne Ranta
-- This file comes with NO WARRANTY and may be used FOR ANY PURPOSE.
module Language.Clafer.Front.ErrM where
import Language.Clafer.Front.Absclafer
-- the Error monad: like Maybe type with error msgs
import Control.Monad (MonadPlus(..), liftM)
data Err a = Ok a | Bad Pos String
deriving (Show, Eq, Ord)
instance Monad Err where
return = Ok
fail = Bad noPos
Ok a >>= f = f a
Bad p s >>= _ = Bad p s
instance Functor Err where
fmap = liftM
instance MonadPlus Err where
mzero = Bad noPos "Err.mzero"
mplus (Bad _ _) y = y
mplus x _ = x