bound-0.5.1: Making de Bruijn Succ Less

Portabilityportable
Stabilityexperimental
MaintainerEdward Kmett <ekmett@gmail.com>
Safe HaskellSafe-Inferred

Bound.Class

Description

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

Synopsis

Documentation

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.

Methods

(>>>=) :: 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

Instances

Bound (Scope b) 

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

A flipped version of (>>>=).

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