Module Relude_WriterT

module WriterLog: { ... };

WriterLog contains a basic typeclass that has a log type t and a Monoid for t for use as a log. Not all writer typeclass instances require a monoid, but I'm going to normalize on it here for simplicity, and to avoid even more module functor noise. This also contains base implementation for List and Array, which just need to be provided the entry type in order to be used.

module WithMonad: (Monad: BsBastet.Interface.MONAD) => { ... };

Creates a Writer monad with the given inner monad

module WithMonadAndLog: (Monad: BsBastet.Interface.MONAD) => (Log: WriterLog.LOG) => { ... };

Convenience constructor for when you know what Monad and Log type you want to use

module Writer: { ... };

Basic Writer using the Identity monad.