| mtl-1.1.0.2: Monad transformer library | 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://web.cecs.pdx.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 | Source

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 Control.Monad.State.State monad using the Control.Monad.State.StateT monad transformer
    type Control.Monad.State.State s a = Control.Monad.State.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 `Control.Monad.State.State` monad.

Constructors

Identity |

runIdentity :: a |

Instances

Monad Identity
Functor Identity
MonadFix Identity

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