Name: multistate Version: 0.1.1 Cabal-Version: >= 1.8 Build-Type: Simple license: BSD3 license-file: LICENSE Copyright: Jan Bracker, Lennart Spitzner Maintainer: Lennart Spitzner Author: Jan Bracker, Lennart Spitzner Homepage: https://github.com/lspitzner/multistate Bug-reports: https://github.com/lspitzner/multistate/issues Stability: Experimental category: Control tested-with: GHC == 7.8.2 Synopsis: like mtl's ReaderT/StateT, but more than one contained value/type. Description: 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. See the Example application for some very basic usage. This package currently lacks a complete set of "lifting instances", i.e. instance definitions for classes such as mtl's MonadReader "over" the newly introduced monad transformers. These "lifting instances" would be necessary to achieve full compatability with existing transformers. Ping me if you find anything specific missing. source-repository head type: git location: git@github.com:lspitzner/multistate.git flag build-test description: Build the MultiState-test test program default: False flag build-example description: Build the MultiState-example example program default: False library { exposed-modules: Control.Monad.MultiState Control.Monad.MultiReader other-modules: Data.HList.HList build-depends: base >=4 && <6, mtl >=2 && <3, tfp >=0.8, transformers == 0.3.* extensions: GADTs TypeFamilies MultiParamTypeClasses FunctionalDependencies FlexibleInstances OverlappingInstances UndecidableInstances ghc-options: -Wall hs-source-dirs: src } executable multistate-test { if flag(build-test) { buildable: True build-depends: multistate, base >= 4 && < 6, transformers == 0.3.*, tfp >=0.8 } else { buildable: False } ghc-options: -Wall main-is: Test.hs hs-source-dirs: test } executable multistate-example { if flag(build-example) { buildable: True build-depends: multistate, base >= 4 && < 6, transformers == 0.3.*, tfp >=0.8, mtl >=2 && <3 } else { buildable: False } main-is: Example.hs hs-source-dirs: example }