# The layers package

The `layers` package provides the type class machinery needed to make monads
built out of stacks of monad transformers easy to use. It introduces the
concept of monad layers, which are a generalisation of monad transformers.
The type class machinery provided by and the design patterns suggested by
`layers` allow for much more modularity than is possible with the existing
type class machinery and design patterns. With `layers` it is possible to
use arbitrary monad interfaces (monad interfaces are what we call the sort
of type classes that you see in the `mtl` and similar packages) with
arbtirary monad transformers (by monad transformers here, we are
specifically to monad constructors, such as the ones defined in
`transformers`), without ever having to explicitly define how to lift
specific interfaces through specific transformers.

`layers` improves upon and/or replaces, in part or in whole, the following
list of packages: `transformers`, `mtl`, `mmtl`, `transformers-base`,
`monad-control`, `lifted-base`, `monad-peel`, `MonadCatchIO-transformers`,
`MonadCatchIO-mtl`, `exception-transformers`, `monad-abort-fd` and probably
more too. There have been many attempts to either improve upoin or work
around the deficiencies of the existing type class machinery for monad
transformer stacks, but we believe `layers` is the most complete of any of
these so far.

A comprehensive overview of the motivation behind `layers` and an
explanation of the design decisions taken is given in
`Documentation.Layers.Overview`. It is *highly recommended* that you read
this if you are considering using this package. The core type classes of the
package are defined in `Control.Monad.Layer` (this can be thought of as
equivalent to or a replacement of `Control.Monad.Trans.Class` from
`transformers`). The rest of the modules in this package export monad
interfaces, in the `Control.Monad.Interface` hierarchy, including
replacements for all of the monad interfaces of the `mtl` package.

## Properties

Version | 0.1 |
---|---|

Change log | None available |

Dependencies | base (>4.5 && <5), transformers (>0.2 && <0.4) [details] |

License | BSD3 |

Author | Shane O'Brien |

Maintainer | shane@duairc.com |

Stability | Experimental |

Category | Control |

Home page | http://github.com/duairc/layers |

Bug tracker | http://github.com/duairc/layers/issues |

Uploaded | Thu Mar 14 20:12:04 UTC 2013 by ShaneOBrien |

Downloads | 441 total (3 in last 30 days) |

Votes | |

Status | Docs uploaded by user Build status unknown [no reports yet] |

## Modules

*Control**Monad**Interface*- Control.Monad.Layer

*Documentation*

[Index]

## Downloads

- layers-0.1.tar.gz [browse] (Cabal source package)
- Package description (included in the package)

#### Maintainers' corner

For package maintainers and hackage trustees