The Monad class defines the basic operations over a monad,
a concept from a branch of mathematics known as category theory.
From the perspective of a Haskell programmer, however, it is best to
think of a monad as an abstract datatype of actions.
Haskell's do expressions provide a convenient syntax for writing
monadic expressions.
Instances of Monad should satisfy the following:
- Left identity
- Right identity
- Associativity
Furthermore, the Monad and Applicative operations should relate as follows:
The above laws imply:
and that pure and (<*>) satisfy the applicative functor laws.
The instances of Monad for List, Maybe and System.IO.IO
defined in the Prelude satisfy these laws.
Methods
(>>=) :: m a -> (a -> m b) -> m binfixl 1Sequentially compose two actions, passing any value produced by the first as an argument to the second.
'
as >>= bs' can be understood as thedoexpressiondo a <- as bs aAn alternative name for this function is 'bind', because it is used to introduce bindings in monadic contexts, but some people may refer to it as 'flatMap', which results from it being equivalent to
\x f -> join (fmap f x) :: Monad m => m a -> (a -> m b) -> m bwhich can be seen as mapping a value with
Monad m => m a -> m (m b)and then 'flattening'm (m b)tom busing join.return :: a -> m aInject a value into the monadic type. This function should not be different from its default implementation as pure. The justification for the existence of this function is merely historic.
Instances75Monad, …
Monad ComplexDefined in base-4.23.0.0 · Data.ComplexMonad FirstDefined in base-4.23.0.0 · Data.SemigroupMonad LastDefined in base-4.23.0.0 · Data.SemigroupMonad MaxDefined in base-4.23.0.0 · Data.SemigroupMonad MinDefined in base-4.23.0.0 · Data.SemigroupMonad GetDefined in binary-0.8.9.3 · Data.Binary.Get.InternalMonad PutMDefined in binary-0.8.9.3 · Data.Binary.PutMonad PutDefined in bytestring-0.12.2.0 · Data.ByteString.Builder.InternalMonad SeqDefined in containers-0.8 · Data.Sequence.InternalMonad TreeDefined in containers-0.8 · Data.TreeMonad PprMDefined in ghc-boot-th-10.0.0.20260917 · GHC.Boot.TH.PprLibMonad NonEmptyDefined in ghc-internal-10.0.0 · GHC.Internal.Data.NonEmpty · orphanMonad IdentityDefined in ghc-internal-10.0.0 · GHC.Internal.Data.Functor.IdentityMonad FirstDefined in ghc-internal-10.0.0 · GHC.Internal.Data.MonoidMonad LastDefined in ghc-internal-10.0.0 · GHC.Internal.Data.MonoidMonad DownDefined in ghc-internal-10.0.0 · GHC.Internal.Data.OrdMonad DualDefined in ghc-internal-10.0.0 · GHC.Internal.Data.Semigroup.InternalMonad ProductDefined in ghc-internal-10.0.0 · GHC.Internal.Data.Semigroup.InternalMonad SumDefined in ghc-internal-10.0.0 · GHC.Internal.Data.Semigroup.InternalMonad NoIODefined in ghc-internal-10.0.0 · GHC.Internal.GHCiMonad Par1Defined in ghc-internal-10.0.0 · GHC.Internal.GenericsMonad MaybeDefined in ghc-internal-10.0.0 · GHC.Internal.BaseMonad STMDefined in ghc-internal-10.0.0 · GHC.Internal.STMMonad QDefined in ghc-internal-10.0.0 · GHC.Internal.TH.MonadMonad PDefined in ghc-internal-10.0.0 · GHC.Internal.Text.ParserCombinators.ReadPMonad ReadPDefined in ghc-internal-10.0.0 · GHC.Internal.Text.ParserCombinators.ReadPMonad ReadPrecDefined in ghc-internal-10.0.0 · GHC.Internal.Text.ParserCombinators.ReadPrecMonad SoloDefined in ghc-internal-10.0.0 · GHC.Internal.BaseMonad IODefined in ghc-internal-10.0.0 · GHC.Internal.BaseMonad STMDefined in stm-2.5.3.1 · Control.Sequential.STMMonad []Defined in ghc-internal-10.0.0 · GHC.Internal.BaseMonad ProxyDefined in ghc-internal-10.0.0 · GHC.Internal.Data.ProxyMonad U1Defined in ghc-internal-10.0.0 · GHC.Internal.GenericsMonad (State s)Defined in containers-0.8 · Utils.Containers.Internal.StateMonad (ST s)Defined in ghc-internal-10.0.0 · GHC.Internal.Control.Monad.ST.Lazy.ImpMonad (Either e)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.EitherMonad (ST s)Defined in ghc-internal-10.0.0 · GHC.Internal.STMonad (IParser t)Defined in text-2.1.4 · Data.Text.Internal.ReadMonad m => Monad (WrappedMonad m)Defined in base-4.23.0.0 · Control.ApplicativeMonad m => Monad (CatchT m)Defined in exceptions-0.10.12 · Control.Monad.Catch.PureMonad m => Monad (MaybeT m)Defined in transformers-0.6.3.0 · Control.Monad.Trans.MaybeMonoid a => Monad (Tuple2 a)Defined in ghc-internal-10.0.0 · GHC.Internal.BaseArrowApply a => Monad (ArrowMonad a)Defined in ghc-internal-10.0.0 · GHC.Internal.Control.ArrowMonad (t m) => Monad (LiftingAccum t m)Defined in mtl-2.3.2 · Control.Monad.AccumMonad (t m) => Monad (LiftingSelect t m)Defined in mtl-2.3.2 · Control.Monad.SelectMonad f => Monad (Ap f)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.MonoidMonad f => Monad (Alt f)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Semigroup.InternalMonad f => Monad (Rec1 f)Defined in ghc-internal-10.0.0 · GHC.Internal.GenericsMonad m => Monad (Kleisli m a)Defined in ghc-internal-10.0.0 · GHC.Internal.Control.ArrowMonad m => Monad (StateT s m)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.Functor.UtilsMonad m => Monad (ExceptT e m)Defined in transformers-0.6.3.0 · Control.Monad.Trans.ExceptMonad m => Monad (IdentityT m)Defined in transformers-0.6.3.0 · Control.Monad.Trans.IdentityMonad m => Monad (ReaderT r m)Defined in transformers-0.6.3.0 · Control.Monad.Trans.ReaderMonad m => Monad (SelectT r m)Defined in transformers-0.6.3.0 · Control.Monad.Trans.SelectMonad m => Monad (StateT s m)Defined in transformers-0.6.3.0 · Control.Monad.Trans.State.LazyMonad m => Monad (StateT s m)Defined in transformers-0.6.3.0 · Control.Monad.Trans.State.StrictMonad m => Monad (WriterT w m)Defined in transformers-0.6.3.0 · Control.Monad.Trans.Writer.CPSMonad m => Monad (Reverse m)Defined in transformers-0.6.3.0 · Data.Functor.ReverseDerived instance.
(Applicative f, Monad f) => Monad (WhenMissing f x)Defined in containers-0.8 · Data.IntMap.InternalEquivalent to
ReaderT k (ReaderT x (MaybeT f)).(Monoid a, Monoid b) => Monad (Tuple3 a b)Defined in ghc-internal-10.0.0 · GHC.Internal.Base(Monoid w, Functor m, Monad m) => Monad (AccumT w m)Defined in transformers-0.6.3.0 · Control.Monad.Trans.Accum(Monoid w, Monad m) => Monad (WriterT w m)Defined in transformers-0.6.3.0 · Control.Monad.Trans.Writer.Lazy(Monoid w, Monad m) => Monad (WriterT w m)Defined in transformers-0.6.3.0 · Control.Monad.Trans.Writer.StrictMonad (ContT r m)Defined in transformers-0.6.3.0 · Control.Monad.Trans.ContMonad ((->) r)Defined in ghc-internal-10.0.0 · GHC.Internal.Base(Applicative f, Monad f) => Monad (WhenMissing f k x)Defined in containers-0.8 · Data.Map.InternalEquivalent to
ReaderT k (ReaderT x (MaybeT f)).(Monad f, Applicative f) => Monad (WhenMatched f x y)Defined in containers-0.8 · Data.IntMap.InternalEquivalent to
ReaderT Key (ReaderT x (ReaderT y (MaybeT f)))(Monad f, Monad g) => Monad (Product f g)Defined in base-4.23.0.0 · Data.Functor.Product(Monad f, Monad g) => Monad (f :*: g)Defined in ghc-internal-10.0.0 · GHC.Internal.Generics(Monoid a, Monoid b, Monoid c) => Monad (Tuple4 a b c)Defined in ghc-internal-10.0.0 · GHC.Internal.BaseMonad f => Monad (M1 i c f)Defined in ghc-internal-10.0.0 · GHC.Internal.GenericsMonad m => Monad (RWST r w s m)Defined in transformers-0.6.3.0 · Control.Monad.Trans.RWS.CPS(Monad f, Applicative f) => Monad (WhenMatched f k x y)Defined in containers-0.8 · Data.Map.InternalEquivalent to
ReaderT k (ReaderT x (ReaderT y (MaybeT f)))(Monoid w, Monad m) => Monad (RWST r w s m)Defined in transformers-0.6.3.0 · Control.Monad.Trans.RWS.Lazy(Monoid w, Monad m) => Monad (RWST r w s m)Defined in transformers-0.6.3.0 · Control.Monad.Trans.RWS.Strict