cat/instances/monad

Monad instances: Writer, Reader.

Values

pub fn reader_monad(
  ,
) -> monad.Monad(
  types.ReaderF(r),
  a,
  b,
  cat.Reader(r, a),
  cat.Reader(r, b),
  cat.Reader(r, fn(a) -> b),
)

Monad instance for Reader.

instance Monad ((->) r) where
  f >>= k = \ r -> k (f r) r
pub fn writer_monad(
  ,
) -> monad.Monad(
  types.WriterF,
  a,
  b,
  cat.Writer(a),
  cat.Writer(b),
  cat.Writer(fn(a) -> b),
)

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