The project provides an implementation of all basic monads in ReasonML.
The following monads are available so far:
- Writer Monad
- Reader Monad
- State Monad
- List Monad
- Option Monad
- Promise Monad
- Continuation Monad
- Indentity Monad
module TestWriterMonad = WriterMonad.Make({
type t = string;
let mappend = (s1, s2) => s1 ++ ", then " ++ s2;
let mempty = () => "";
});
module TestWriterMonadEx = Monad.Ex(TestWriterMonad);
let () = {
open TestWriterMonad;
open TestWriterMonadEx;
let mult = x => make((x * 2, "Multiply by 2"));
let plus = x => make((x + 2, "Plus 2"));
let process = mult >=> plus;
let (res, log) = process(10) |> extract; // (22, "Multiply by 2, then Plus 2")
};module TestWriterMonad = WriterMonad.Make({
type t = string;
let mappend = (s1, s2) => s1 ++ ", then " ++ s2;
let mempty = () => "";
});
module TestWriterMonadEx = Monad.Ex(TestWriterMonad);
let () = {
open TestWriterMonad;
open TestWriterMonadEx;
let mult = x => make((x * 2, "Multiply by 2"));
let plus = x => make((x + 2, "Plus 2"));
let monad = make((10, "Take 10")) >>= mult >>= plus;
let (res, log) = monad |> extract; // (22, "Take 10, then Multiply by 2, then Plus 2")
};See the tests for more examples.