{-|
Module      : Control.Error.Cont.Util
Description : Utility functions for error continuations
Copyright   : (c) Eitan Chatav, 2015
License     : PublicDomain
Maintainer  : eitan.chatav@gmail.com
Stability   : experimental

This module provides utility functions to convert between 'MaybeContT' and
'EitherContT' computations.
-}

module Control.Error.Cont.Util
    ( hush
    , note
    ) where

import Control.Applicative
import Control.Monad.Trans.EitherCont
import Control.Monad.Trans.MaybeCont

-- |Suppress the nothing continuation of an 'EitherContT'
hush :: EitherContT a l m r -> MaybeContT a m r
hush ec = MaybeContT $ \ma k -> runEitherContT ec (const ma) k

-- |Tag the nothing continuation of a 'MaybeContT'
note :: l -> MaybeContT a m r -> EitherContT a l m r
note l mc = EitherContT $ \kl kr -> runMaybeContT mc (kl l) kr