Copyright | (c) The University of Glasgow 2001 |
---|---|
License | BSD-style (see the file libraries/base/LICENSE) |
Maintainer | libraries@haskell.org |
Stability | provisional |
Portability | portable |
Safe Haskell | Safe |
Language | Haskell2010 |
Control.Monad.Instances
Description
Documentation
class Functor f where Source #
A type f
is a Functor if it provides a function fmap
which, given any types a
and b
lets you apply any function from (a -> b)
to turn an f a
into an f b
, preserving the
structure of f
. Furthermore f
needs to adhere to the following:
Note, that the second law follows from the free theorem of the type fmap
and
the first law, so you need only check that the former condition holds.
Minimal complete definition
Instances
class Applicative m => Monad m where Source #
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
return
a>>=
k = k a- Right identity
m
>>=
return
= m- Associativity
m
>>=
(\x -> k x>>=
h) = (m>>=
k)>>=
h
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 lists, Maybe
and IO
defined in the Prelude satisfy these laws.
Minimal complete definition
Methods
(>>=) :: forall a b. m a -> (a -> m b) -> m b infixl 1 Source #
Sequentially compose two actions, passing any value produced by the first as an argument to the second.
(>>) :: forall a b. m a -> m b -> m b infixl 1 Source #
Sequentially compose two actions, discarding any value produced by the first, like sequencing operators (such as the semicolon) in imperative languages.
Inject a value into the monadic type.
Instances
Monad [] Source # | Since: 2.1 |
Monad Maybe Source # | Since: 2.1 |
Monad IO Source # | Since: 2.1 |
Monad Par1 Source # | Since: 4.9.0.0 |
Monad NonEmpty Source # | Since: 4.9.0.0 |
Monad NoIO Source # | Since: 4.4.0.0 |
Monad ReadP Source # | Since: 2.1 |
Monad ReadPrec Source # | Since: 2.1 |
Monad Down Source # | Since: 4.11.0.0 |
Monad Product Source # | Since: 4.8.0.0 |
Monad Sum Source # | Since: 4.8.0.0 |
Monad Dual Source # | Since: 4.8.0.0 |
Monad Last Source # | Since: 4.8.0.0 |
Monad First Source # | Since: 4.8.0.0 |
Monad STM Source # | Since: 4.3.0.0 |
Monad Identity Source # | Since: 4.8.0.0 |
Monad Option Source # | Since: 4.9.0.0 |
Monad Last Source # | Since: 4.9.0.0 |
Monad First Source # | Since: 4.9.0.0 |
Monad Max Source # | Since: 4.9.0.0 |
Monad Min Source # | Since: 4.9.0.0 |
Monad Complex Source # | Since: 4.9.0.0 |
Monad (Either e) Source # | Since: 4.4.0.0 |
Monad (U1 :: Type -> Type) Source # | Since: 4.9.0.0 |
Monoid a => Monad ((,) a) Source # | Since: 4.9.0.0 |
Monad (ST s) Source # | Since: 2.1 |
Monad (Proxy :: Type -> Type) Source # | Since: 4.7.0.0 |
ArrowApply a => Monad (ArrowMonad a) Source # | Since: 2.1 |
Defined in Control.Arrow Methods (>>=) :: ArrowMonad a a0 -> (a0 -> ArrowMonad a b) -> ArrowMonad a b Source # (>>) :: ArrowMonad a a0 -> ArrowMonad a b -> ArrowMonad a b Source # return :: a0 -> ArrowMonad a a0 Source # | |
Monad m => Monad (WrappedMonad m) Source # | Since: 4.7.0.0 |
Defined in Control.Applicative Methods (>>=) :: WrappedMonad m a -> (a -> WrappedMonad m b) -> WrappedMonad m b Source # (>>) :: WrappedMonad m a -> WrappedMonad m b -> WrappedMonad m b Source # return :: a -> WrappedMonad m a Source # | |
Monad (ST s) Source # | Since: 2.1 |
Monad f => Monad (Rec1 f) Source # | Since: 4.9.0.0 |
Monad f => Monad (Alt f) Source # | Since: 4.8.0.0 |
Monad f => Monad (Ap f) Source # | Since: 4.12.0.0 |
Monad ((->) r :: Type -> Type) Source # | Since: 2.1 |
(Monad f, Monad g) => Monad (f :*: g) Source # | Since: 4.9.0.0 |
(Monad f, Monad g) => Monad (Product f g) Source # | Since: 4.9.0.0 |
Monad f => Monad (M1 i c f) Source # | Since: 4.9.0.0 |