packages feed

lhc-0.6.20081210: src/Util/ContextMonad.hs

module Util.ContextMonad where

import Control.Monad.Error
import Control.Monad


class Monad m => ContextMonad c m | m -> c where
    withContext :: c -> m a -> m a


instance Error [String] where
    noMsg = []
    strMsg s = [s]


instance ContextMonad String (Either [String]) where
    withContext s (Right x) = Right x
    withContext s (Left cs) = Left  (s:cs)


runSimpleContextMonad :: Either [String] a -> a
runSimpleContextMonad (Left ss) = error $ unlines ss
runSimpleContextMonad (Right x) = x