packages feed

mmtl-base-15321.1: Control/Monad/Base.hs

{-# LANGUAGE FunctionalDependencies, UndecidableInstances #-}

module Control.Monad.Base where

import Control.Monad.Trans;
import Control.Monad.Identity;

class (Monad b, Monad m) => MonadBase b m | m -> b where liftBase :: b a -> m a;

instance (MonadTrans xT, Monad (xT m), MonadBase b m) => MonadBase b (xT m) where liftBase = lift . liftBase;

instance MonadBase IO         IO         where liftBase = id;
instance MonadBase Maybe      Maybe      where liftBase = id;
instance MonadBase (Either a) (Either a) where liftBase = id;
instance MonadBase []         []         where liftBase = id;
instance MonadBase ((->) r)   ((->) r)   where liftBase = id;
instance MonadBase Identity   Identity   where liftBase = id;