monad-control-aligned: Just like monad-control, except less efficient, and the monadic state terms are all * -> *

[ bsd3, control, library ] [ Propose Tags ]

[Skip to Readme]
Versions 0.0.0, 0.0.1,
Change log CHANGELOG
Dependencies base (>=4.5 && <5), stm (>=2.3 && <3), transformers (>=0.2 && <0.6), transformers-base (>=0.4.4 && <0.5), transformers-compat (>=0.3 && <0.7) [details]
License BSD-3-Clause
Copyright (c) 2011 Bas van Dijk, Anders Kaseorg
Author Athan Clark
Maintainer Athan Clark <>
Category Control
Home page
Bug tracker
Source repo head: git clone git://
Uploaded by athanclark at Mon Mar 26 09:00:03 UTC 2018
Distributions LTSHaskell:, NixOS:, Stackage:, openSUSE:
Downloads 439 total (16 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2018-03-26 [all 1 reports]
Hackage Matrix CI




Maintainer's Corner

For package maintainers and hackage trustees

Readme for monad-control-aligned-

[back to package description]


An alternative edition of monad-control that forces all state data types to:

  • be exposed at the Constraint level
  • be aligned s.t. the state is of kind * -> *, wherein the subject data type is indeed the monadic value a in m a; this opposes the StateT and WriterT definitions, whos' state types are in the form of (a, s); opposing curried type application indeed. Our edition enforces instances in the form of (,) s - thus leaving the last applied type polymorphic, achieving our goal of * -> * aligned [tm] state type.

This just allows us to use extractable-singleton to run our state type - useful for obtaining the subject data while running in a lifted context - basically exactly the same as what monad-unlift does.