A computation whose value is a
.
A computation whose value is obtained by first runnning ta
then
passing its value to the continutation k
to get the computation
that provides the final value.
A computation whose value is obtained from the computation that is
returned by the continuation k
.
A computation that produces an A
.
A computation that returns a
when it is eventually run.
Trampolines. Useful for converting stack-heavy operations into heap-based ones and thereby avoiding stack overflow.
Based on code from "Stackless Scala With Free Monads", Runar Oli Bjarnason.