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)
Search Document