| 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