# do-notation
[](https://travis-ci.org/isovector/do-notation) | [Hackage][hackage]
[hackage]: https://hackage.haskell.org/package/do-notation
## Dedication
> I've just locked an open door. Strange, yet symbolically compelling.
>
> Manny Calavera, Grim Fandango
## Overview
Have you ever wanted to manage siiiick invariants with indexed monads without
giving up your regular monads in the process? `do-notation` lets you do this
with a bunch of type jiggery-pokery behind the scenes.
It also provides the `Ix m` indexed monad which is a free construction over a
regular monad `m`. Cool.
## Usage
```haskell
{-# LANGUAGE RebindableSyntax #-}
import Language.Haskell.DoNotation
import Prelude hiding (Monad (..), pure)
```
## Limitations
The implementation doesn't play very nicely with `do`-blocks bound via `let`.
## Thanks
Huge shout-outs to [Csongor Kiss][kcsongor] for very patiently walking me
through the incoherent instance machinery necessary to make this all work.
[kcsongor]: http://kcsongor.github.io/