name: effect-stack
version: 0.3
synopsis: Reducing the pain of transformer stacks with duplicated effects
description: The @mtl@ provides a nice way to write monadic actions
which take advantage of a particular kind of effect (say,
statefulness or exception handling) without being forced
to say exactly which monad is providing that effect.
However, if a transformer stack includes two transformers
that provide the given effect, @mtl@ does not provide a
clean way to disambiguate which one is wanted; the topmost
one is always chosen.
.
This package provides tools for disambiguating without
being forced to choose a particular transformer stack. It
provides a separate stack for each kind of effect; you may
then disambiguate by depth within each stack. For example,
in a stack with two @StateT@ transformers, one can write
.
@foo :: MonadStateDepth 0 m a => m a
foo = depthState \@0 get@
.
for access to the topmost state effects, or
.
@bar :: MonadStateDepth 1 m a => m a
bar = depthState \@1 get@
.
for access to the state from underneath the topmost
@StateT@, no matter how deep in the stack the two
@StateT@s are.
.
See the readme for more detailed motivation, usage
examples, and documentation.
license: BSD3
license-file: LICENSE
author: Daniel Wagner
maintainer: me@dmwit.com
-- copyright:
category: Control
build-type: Simple
extra-source-files: ChangeLog.md README.md
cabal-version: 2.0
source-repository head
type: git
location: https://github.com/dmwit/effect-stack
library
exposed-modules:
Control.Monad.Stack.Accum,
Control.Monad.Stack.Cont,
Control.Monad.Stack.Error,
Control.Monad.Stack.Fail,
Control.Monad.Stack.Internal,
Control.Monad.Stack.Reader,
Control.Monad.Stack.Select,
Control.Monad.Stack.State,
Control.Monad.Stack.Writer
other-extensions:
AllowAmbiguousTypes,
ConstraintKinds,
DataKinds,
FlexibleContexts,
KindSignatures,
PolyKinds,
RankNTypes,
ScopedTypeVariables,
TypeApplications,
TypeFamilies,
TypeOperators,
UndecidableInstances
build-depends:
base ^>=4.12,
constraints ^>=0.11,
mtl ^>= 2.2,
transformers ^>=0.5.6
default-language: Haskell2010
ghc-options: -fno-warn-tabs