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
Methods
fmap :: (a -> b) -> f a -> f b Source #
Using ApplicativeDo
: '
' can be understood as
the fmap
f asdo
expression
do a <- as pure (f a)
with an inferred Functor
constraint.
Instances
Functor [] Source # | Since: 2.1 |
Functor Maybe Source # | Since: 2.1 |
Functor IO Source # | Since: 2.1 |
Functor Par1 Source # | Since: 4.9.0.0 |
Functor NonEmpty Source # | Since: 4.9.0.0 |
Functor NoIO Source # | Since: 4.8.0.0 |
Functor ReadP Source # | Since: 2.1 |
Functor ReadPrec Source # | Since: 2.1 |
Functor Down Source # | Since: 4.11.0.0 |
Functor Product Source # | Since: 4.8.0.0 |
Functor Sum Source # | Since: 4.8.0.0 |
Functor Dual Source # | Since: 4.8.0.0 |
Functor Last Source # | Since: 4.8.0.0 |
Functor First Source # | Since: 4.8.0.0 |
Functor STM Source # | Since: 4.3.0.0 |
Functor Handler Source # | Since: 4.6.0.0 |
Functor Identity Source # | Since: 4.8.0.0 |
Functor ZipList Source # | Since: 2.1 |
Functor ArgDescr Source # | Since: 4.6.0.0 |
Functor OptDescr Source # | Since: 4.6.0.0 |
Functor ArgOrder Source # | Since: 4.6.0.0 |
Functor Option Source # | Since: 4.9.0.0 |
Functor Last Source # | Since: 4.9.0.0 |
Functor First Source # | Since: 4.9.0.0 |
Functor Max Source # | Since: 4.9.0.0 |
Functor Min Source # | Since: 4.9.0.0 |
Functor Complex Source # | Since: 4.9.0.0 |
Functor (Either a) Source # | Since: 3.0 |
Functor (V1 :: Type -> Type) Source # | Since: 4.9.0.0 |
Functor (U1 :: Type -> Type) Source # | Since: 4.9.0.0 |
Functor ((,) a) Source # | Since: 2.1 |
Functor (ST s) Source # | Since: 2.1 |
Functor (Array i) Source # | Since: 2.1 |
Functor (Proxy :: Type -> Type) Source # | Since: 4.7.0.0 |
Arrow a => Functor (ArrowMonad a) Source # | Since: 4.6.0.0 |
Defined in Control.Arrow Methods fmap :: (a0 -> b) -> ArrowMonad a a0 -> ArrowMonad a b Source # (<$) :: a0 -> ArrowMonad a b -> ArrowMonad a a0 Source # | |
Monad m => Functor (WrappedMonad m) Source # | Since: 2.1 |
Defined in Control.Applicative Methods fmap :: (a -> b) -> WrappedMonad m a -> WrappedMonad m b Source # (<$) :: a -> WrappedMonad m b -> WrappedMonad m a Source # | |
Functor (ST s) Source # | Since: 2.1 |
Functor (Arg a) Source # | Since: 4.9.0.0 |
Functor f => Functor (Rec1 f) Source # | Since: 4.9.0.0 |
Functor (URec Char :: Type -> Type) Source # | Since: 4.9.0.0 |
Functor (URec Double :: Type -> Type) Source # | Since: 4.9.0.0 |
Functor (URec Float :: Type -> Type) Source # | Since: 4.9.0.0 |
Functor (URec Int :: Type -> Type) Source # | Since: 4.9.0.0 |
Functor (URec Word :: Type -> Type) Source # | Since: 4.9.0.0 |
Functor (URec (Ptr ()) :: Type -> Type) Source # | Since: 4.9.0.0 |
Functor ((,,) a b) Source # | Since: 4.14.0.0 |
Functor f => Functor (Alt f) Source # | Since: 4.8.0.0 |
Functor f => Functor (Ap f) Source # | Since: 4.12.0.0 |
Functor (Const m :: Type -> Type) Source # | Since: 2.1 |
Functor m => Functor (Kleisli m a) Source # | Since: 4.14.0.0 |
Arrow a => Functor (WrappedArrow a b) Source # | Since: 2.1 |
Defined in Control.Applicative Methods fmap :: (a0 -> b0) -> WrappedArrow a b a0 -> WrappedArrow a b b0 Source # (<$) :: a0 -> WrappedArrow a b b0 -> WrappedArrow a b a0 Source # | |
Functor ((->) r :: Type -> Type) Source # | Since: 2.1 |
Functor (K1 i c :: Type -> Type) Source # | Since: 4.9.0.0 |
(Functor f, Functor g) => Functor (f :+: g) Source # | Since: 4.9.0.0 |
(Functor f, Functor g) => Functor (f :*: g) Source # | Since: 4.9.0.0 |
Functor ((,,,) a b c) Source # | Since: 4.14.0.0 |
(Functor f, Functor g) => Functor (Sum f g) Source # | Since: 4.9.0.0 |
(Functor f, Functor g) => Functor (Product f g) Source # | Since: 4.9.0.0 |
Functor f => Functor (M1 i c f) Source # | Since: 4.9.0.0 |
(Functor f, Functor g) => Functor (f :.: g) Source # | Since: 4.9.0.0 |
(Functor f, Functor g) => Functor (Compose f g) Source # | Since: 4.9.0.0 |
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.
'as
' can be understood as the >>=
bsdo
expression
do a <- as bs a
(>>) :: 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.
'as
' can be understood as the >>
bsdo
expression
do as bs
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 |
(Monoid a, Monoid b) => Monad ((,,) a b) Source # | Since: 4.14.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 m => Monad (Kleisli m a) Source # | Since: 4.14.0.0 |
Monad ((->) r :: Type -> Type) Source # | Since: 2.1 |
(Monad f, Monad g) => Monad (f :*: g) Source # | Since: 4.9.0.0 |
(Monoid a, Monoid b, Monoid c) => Monad ((,,,) a b c) Source # | Since: 4.14.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 |