Content deleted Content added
Line 40:
*<math>\mathrm{return}: A \rarr \mathrm{M} (A + E) = a \mapsto \mathrm{return} (\mathrm{value}\,a)</math>
*<math>\mathrm{bind}: \mathrm{M} (A + E) \rarr (A \rarr \mathrm{M} (B + E)) \rarr \mathrm{M} (B + E) = a \mapsto f \mapsto \mathrm{bind} \, a \,\left( a' \mapsto \begin{cases} \mbox{return err } e & \mbox{if } a' = \mathrm{err} \, e\\ f \, a'' & \mbox{if } a' = \mathrm{value} \, a'' \end{cases} \right)</math>
*<math>\mathrm{lift}: \mathrm{M}
=== The reader monad transformer ===
Given any monad <math>\mathrm{M} \, A</math>, the reader monad transformer <math>E \rarr \mathrm{M}\,A</math> (where <math>E</math> is the environment type) is defined by:
*<math>\mathrm{return}: A \rarr E \rarr \mathrm{M} \, A = a \mapsto e \mapsto \mathrm{return} \, a</math>
*<math>\mathrm{bind}: (E \rarr \mathrm{M} \, A) \rarr (A \rarr E \rarr \mathrm{M}\,B) \rarr E \rarr \mathrm{M}\,B = m \mapsto k \mapsto e \mapsto \mathrm{bind} \, (m \, e) \,( a \mapsto k \, a \, e)</math>
*<math>\mathrm{lift}: \mathrm{M} \, A \rarr E \rarr \mathrm{M} \, A = a \mapsto e \mapsto a</math>
== See also ==
|