cat/instances/monad
Monad instances: Writer, Reader.
Functions
pub fn reader_monad() -> Monad(
Applicative(
Functor(ReaderF(a), b, c, Reader(a, b), Reader(a, c)),
b,
Reader(a, fn(b) -> c),
Reader(a, b),
Reader(a, c),
),
b,
Reader(d, b),
Reader(d, e),
)
Monad instance for Reader
.
instance Monad ((->) r) where
f >>= k = \ r -> k (f r) r
pub fn writer_monad() -> Monad(
Applicative(
Functor(WriterF, a, b, Writer(a), Writer(b)),
a,
Writer(fn(a) -> b),
Writer(a),
Writer(b),
),
a,
Writer(a),
Writer(c),
)
Monad instance for Writer
.
instance Monad Writer where
ma >>= k =
let (va, log1) = runWriter ma
(vb, log2) = runWriter (k va)
in Writer (vb, log1 ++ log2)