|
| 1 | +module Control.Monad.Identity.Trans where |
| 2 | + |
| 3 | +import Prelude |
| 4 | + |
| 5 | +import Control.Alt (class Alt) |
| 6 | +import Control.Alternative (class Alternative) |
| 7 | +import Control.Monad.Cont.Class (class MonadCont) |
| 8 | +import Control.Monad.Error.Class (class MonadError, class MonadThrow) |
| 9 | +import Control.Monad.Reader.Class (class MonadAsk, class MonadReader) |
| 10 | +import Control.Monad.Rec.Class (class MonadRec) |
| 11 | +import Control.Monad.State.Class (class MonadState) |
| 12 | +import Control.Monad.Trans.Class (class MonadTrans) |
| 13 | +import Control.Monad.Writer.Class (class MonadTell, class MonadWriter) |
| 14 | +import Control.MonadPlus (class MonadPlus) |
| 15 | +import Control.MonadZero (class MonadZero) |
| 16 | +import Control.Plus (class Plus) |
| 17 | +import Data.Eq (class Eq1) |
| 18 | +import Data.Foldable (class Foldable) |
| 19 | +import Data.Traversable (class Traversable) |
| 20 | +import Data.Newtype (class Newtype) |
| 21 | +import Data.Ord (class Ord1) |
| 22 | +import Effect.Class (class MonadEffect) |
| 23 | + |
| 24 | +-- | The `IdentityT` monad transformer. |
| 25 | +-- | |
| 26 | +-- | This monad acts like a placeholder for functions that take a monad |
| 27 | +-- | transformer as an argument, similar to `identity` for functions and |
| 28 | +-- | `Identity` for monads. |
| 29 | +newtype IdentityT m a = IdentityT (m a) |
| 30 | + |
| 31 | +-- | Run a computation in the `IdentityT` monad. |
| 32 | +runIdentityT :: forall m a. IdentityT m a -> m a |
| 33 | +runIdentityT (IdentityT ma) = ma |
| 34 | + |
| 35 | +-- | Change the result type of a `IdentityT` monad action. |
| 36 | +mapIdentityT :: forall m1 m2 a b. (m1 a -> m2 b) -> IdentityT m1 a -> IdentityT m2 b |
| 37 | +mapIdentityT f (IdentityT m) = IdentityT (f m) |
| 38 | + |
| 39 | +derive instance eqIdentityT :: (Eq1 m, Eq a) => Eq (IdentityT m a) |
| 40 | +derive instance ordIdentityT :: (Ord1 m, Ord a) => Ord (IdentityT m a) |
| 41 | +derive instance eq1IdentityT :: Eq1 m => Eq1 (IdentityT m) |
| 42 | +derive instance ord1IdentityT :: Ord1 m => Ord1 (IdentityT m) |
| 43 | +derive instance newtypeIdentityT :: Newtype (IdentityT m a) _ |
| 44 | + |
| 45 | +derive newtype instance functorIdentityT :: Functor m => Functor (IdentityT m) |
| 46 | +derive newtype instance applyIdentityT :: Apply m => Apply (IdentityT m) |
| 47 | +derive newtype instance applicativeIdentityT :: Applicative m => Applicative (IdentityT m) |
| 48 | +derive newtype instance altIdentityT :: Alt m => Alt (IdentityT m) |
| 49 | +derive newtype instance plusIdentityT :: Plus m => Plus (IdentityT m) |
| 50 | +derive newtype instance alternativeIdentityT :: Alternative m => Alternative (IdentityT m) |
| 51 | +derive newtype instance bindIdentityT :: Bind m => Bind (IdentityT m) |
| 52 | +derive newtype instance monadIdentityT :: Monad m => Monad (IdentityT m) |
| 53 | +derive newtype instance monadRecIdentityT :: MonadRec m => MonadRec (IdentityT m) |
| 54 | +derive newtype instance monadZeroIdentityT :: MonadZero m => MonadZero (IdentityT m) |
| 55 | +derive newtype instance monadPlusIdentityT :: MonadPlus m => MonadPlus (IdentityT m) |
| 56 | + |
| 57 | +instance monadTransIdentityT :: MonadTrans IdentityT where |
| 58 | + lift = IdentityT |
| 59 | + |
| 60 | +derive newtype instance monadEffectIdentityT :: MonadEffect m => MonadEffect (IdentityT m) |
| 61 | +derive newtype instance monadContIdentityT :: MonadCont m => MonadCont (IdentityT m) |
| 62 | +derive newtype instance monadThrowIdentityT :: MonadThrow e m => MonadThrow e (IdentityT m) |
| 63 | +derive newtype instance monadErrorIdentityT :: MonadError e m => MonadError e (IdentityT m) |
| 64 | +derive newtype instance monadAskIdentityT :: MonadAsk r m => MonadAsk r (IdentityT m) |
| 65 | +derive newtype instance monadReaderIdentityT :: MonadReader r m => MonadReader r (IdentityT m) |
| 66 | +derive newtype instance monadStateIdentityT :: MonadState s m => MonadState s (IdentityT m) |
| 67 | +derive newtype instance monadTellIdentityT :: MonadTell w m => MonadTell w (IdentityT m) |
| 68 | +derive newtype instance monadWriterIdentityT :: MonadWriter w m => MonadWriter w (IdentityT m) |
| 69 | +derive newtype instance foldableIdentityT :: Foldable m => Foldable (IdentityT m) |
| 70 | +derive newtype instance traversableIdentityT :: Traversable m => Traversable (IdentityT m) |
0 commit comments