| Haskell Hierarchical Libraries (mtl package) | Source code | Contents | Index

Control.Monad.Identity

Portability | portable
Stability | experimental
Maintainer | libraries@haskell.org

Description

Computation type:
  Simple function application.
Binding strategy:
  The bound function is applied to the input value. ``Identity` x >>= f == `Identity` (f x)`
Useful for:
  Monads can be derived from monad transformers applied to the `Identity` monad.
Zero and plus:
  None.
Example type:
  ``Identity` a`

The `Identity` monad is a monad that does not embody any computational strategy. It simply applies the bound function to its input without any modification. Computationally, there is no reason to use the `Identity` monad instead of the much simpler act of simply applying functions to their arguments. The purpose of the `Identity` monad is its fundamental role in the theory of monad transformers. Any monad transformer applied to the `Identity` monad yields a non-transformer version of that monad.

Inspired by the paper Functional Programming with Overloading and Higher-Order Polymorphism, Mark P Jones (http://www.cse.ogi.edu/~mpj/) Advanced School of Functional Programming, 1995.

Synopsis

newtype Identity a = Identity {

runIdentity :: a

}

module Control.Monad
module Control.Monad.Fix

Documentation
newtype Identity a

Identity wrapper. Abstraction for wrapping up a object. If you have an monadic function, say:

       example :: Int -> Identity Int
       example x = return (x*x)

you can "run" it, using

     Main> runIdentity (example 42)
     1764 :: Int

A typical use of the Identity monad is to derive a monad from a monad transformer.

    -- derive the State monad using the StateT monad transformer
    type State s a = StateT s Identity a

The ``runIdentity`` label is used in the type definition because it follows a style of monad definition that explicitly represents monad values as computations. In this style, a monadic computation is built up using the monadic operators and then the value of the computation is extracted using the `run******` function. Because the `Identity` monad does not do any computation, its definition is trivial. For a better example of this style of monad, see the ``State`` monad.

Constructors

Identity |

runIdentity :: a |

Instances

Functor Identity
Monad Identity
MonadFix Identity

module Control.Monad
module Control.Monad.Fix
Produced by Haddock version 0.8