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

# 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
```

```-- 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 FieldsrunIdentity :: a

Instances