multistate: like mtl's ReaderT/StateT, but more than one contained value/type.
Introduction
When using multiple ReaderT's or StateT's in the same monad stack, it becomes necessary to lift the operations in order to affect a specific transformer. Using heterogenous lists (type level functions), a GADT and a corresponding type class, this package provides transformers that remove that necessity: MultiReaderT/MultiStateT can contain a heterogenous list of values.
The type inferred for the getter/setter determines which value is read/written.
Example
-- an IO action wrapped by a MultiState -- containing both a Char and a [Char]. examplePrint :: MultiStateT (Cons [Char] (Cons Char Null)) IO () examplePrint = do c <- mGet -- inferred to be :: m Char cs <- mGet -- inferred to be :: m [Char] lift $ putStrLn (c:cs)
This computation can be executed in the following way:
main = evalMultiStateT $ withMultiState 'H' $ withMultiState "ello, World!" $ examplePrint
( you can find this example as an executable in the package. )
Known Deficits
This package currently lacks a complete set of "lifting instances", i.e. instance definitions for classes such as mtl's MonadWriter "over" the newly introduced monad transformers, as in
instance (MonadWriter w m) => MonadWriter w (MultiStateT c m) where ..
These "lifting instances" would be necessary to achieve full compatability with existing transformers. Ping me if you find anything specific missing.
Flags
Automatic Flags
Name | Description | Default |
---|---|---|
build-test | Build the MultiState-test test program | Disabled |
build-example | Build the MultiState-example example program | Disabled |
Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info
Downloads
- multistate-0.1.2.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
Versions [RSS] | 0.1.1, 0.1.2, 0.1.3.1, 0.1.3.2, 0.2.0.0, 0.3.0.0, 0.6.0.0, 0.6.1.0, 0.6.2.0, 0.7.0.0, 0.7.1.1, 0.7.1.2, 0.8.0.0, 0.8.0.1, 0.8.0.2, 0.8.0.3, 0.8.0.4 |
---|---|
Dependencies | base (>=4 && <6), mtl (>=2 && <3), multistate, tfp (>=0.8), transformers (>=0.3 && <0.4) [details] |
Tested with | ghc ==7.8.2 |
License | BSD-3-Clause |
Copyright | Jan Bracker, Lennart Spitzner |
Author | Jan Bracker, Lennart Spitzner |
Maintainer | Lennart Spitzner <lsp@informatik.uni-kiel.de> |
Category | Control |
Home page | https://github.com/lspitzner/multistate |
Bug tracker | https://github.com/lspitzner/multistate/issues |
Source repo | head: git clone git@github.com:lspitzner/multistate.git |
Uploaded | by lspitzner at 2014-09-16T21:02:50Z |
Distributions | Arch:0.8.0.4, Debian:0.8.0.3, LTSHaskell:0.8.0.4, NixOS:0.8.0.4 |
Reverse Dependencies | 6 direct, 2 indirect [details] |
Executables | multistate-example, multistate-test |
Downloads | 20803 total (5 in the last 30 days) |
Rating | (no votes yet) [estimated by Bayesian average] |
Your Rating | |
Status | Docs uploaded by user Build status unknown [no reports yet] |