bound-0.5: Haskell 98/2010 Locally-Nameless Generalized de Bruijn Terms

MaintainerEdward Kmett <>
Safe HaskellSafe-Inferred



This module provides the Bound class, for performing substitution into things that are not necessarily full monad transformers.



class Bound t whereSource

Instances of Bound may or may not be monad transformers.

If they are, then m >>>= f ≡ m >>= lift . f is required to hold, and is in fact the default definition. If it is not a MonadTrans instance, then you have greater flexibility in how to implement this class.

This is useful for types like expression lists, case alternatives, schemas, etc. that may not be expressions in their own right, but often contain expressions.


(>>>=) :: Monad f => t f a -> (a -> f c) -> t f cSource

Perform substitution

If t is an instance of MonadTrans and you are compiling on GHC >= 7.4, then this gets the default definition:

m >>>= f = m >>= lift . f


Bound (Scope b) 

(=<<<) :: (Bound t, Monad f) => (a -> f c) -> t f a -> t f cSource

A flipped version of (>>>=).

(=<<<) = flip (>>>=)