universum-1.0.0: src/Universum/Monad/Reexport.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE Trustworthy #-}
module Universum.Monad.Reexport
( -- * Reexport transformers
module Control.Monad.Except
, module Control.Monad.Reader
, module Control.Monad.State.Strict
, module Control.Monad.Trans
, module Control.Monad.Trans.Identity
, module Control.Monad.Trans.Maybe
-- * Reexport Maybe
, module Data.Maybe
-- * Reexport Either
, module Data.Either
, Monad ((>>=), (>>), return)
, MonadFail (fail)
, MonadPlus (..)
, (=<<)
, (>=>)
, (<=<)
, forever
, join
, mfilter
, filterM
, mapAndUnzipM
, zipWithM
, zipWithM_
, foldM
, foldM_
, replicateM
, replicateM_
, liftM2
, liftM3
, liftM4
, liftM5
, ap
, (<$!>)
) where
-- Monad transformers
import Control.Monad.Except (ExceptT (..), runExceptT)
import Control.Monad.Reader (MonadReader, Reader, ReaderT (..), ask, asks, local, reader, runReader)
import Control.Monad.State.Strict (MonadState, State, StateT (..), evalState, evalStateT, execState,
execStateT, get, gets, modify, modify', put, runState, state,
withState)
import Control.Monad.Trans (MonadIO, MonadTrans, lift, liftIO)
import Control.Monad.Trans.Identity (IdentityT (runIdentityT))
import Control.Monad.Trans.Maybe (MaybeT (..), exceptToMaybeT, maybeToExceptT)
-- Maybe
import Data.Maybe (Maybe (..), catMaybes, fromMaybe, isJust, isNothing, listToMaybe, mapMaybe,
maybe, maybeToList)
-- Either
import Data.Either (Either (..), either, isLeft, isRight, lefts, partitionEithers, rights)
import Control.Monad hiding (fail)
#if __GLASGOW_HASKELL__ >= 800
import Control.Monad.Fail (MonadFail (..))
#else
import Prelude (String)
import Text.ParserCombinators.ReadP (ReadP)
import Text.ParserCombinators.ReadPrec (ReadPrec)
import Universum.Base (IO)
import qualified Prelude as P (fail)
-- | Class for 'Monad's that can 'fail'.
-- Copied from 'fail' by Herbert Valerio Riedel (the library is under BSD3).
class Monad m => MonadFail m where
fail :: String -> m a
instance MonadFail Maybe where
fail _ = Nothing
instance MonadFail [] where
fail _ = []
instance MonadFail IO where
fail = P.fail
instance MonadFail ReadPrec where
fail = P.fail -- = P (\_ -> fail s)
instance MonadFail ReadP where
fail = P.fail
#endif