freer-indexed

This package defines "freer indexed monad". It combines the ideas of freer monad and indexed (aka parameterized) monad: Freer Monads, More Extensible Effects Parameterized monads Parameterized Extensible Effects and Session Types It allows defining indexed monadic computations as GADTs without making them into ad-hoc indexed monads, and instead use this data type to convert them into Functor, XApplicative and XMonad instances - see Control.XApplicative and Control.XMonad in this package. This package does not (yet) allow composing these computations. Semantically, these computations could represent type-level state changes of some associated resources, with the first index parameter meaning initial resource state prior to the computation, and the second index - the final resource state, making each computation an edge in the graph of resource state transitions. For XApplicative/XMonad classes all class and additional functions have similar names to standard Applicative/Monad functions, following two naming conventions: function names are prefixed with "x" (for "indeXed") - e.g. xpure, xreturn, xliftM2 etc. operators are postfixed with ":" - e.g. <*>:, >>=:, >=>: etc.


Keywords
effects, library, Propose Tags , Control.XApplicative, Control.XFreer, Control.XMonad, Control.XMonad.Do, Parameterized Extensible Effects and Session Types, docs on hackage, haskell, parameterized
License
BSD-3-Clause
Install
cabal install freer-indexed-0.1.0.0

Documentation