- * Identity_monad
- * Maybe_monad
- * List_monad
- * Reader_monad (has to be parameterized as above)
- * State_monad (has to be parameterized as above)
- * Ref_monad (a version of State_monad with a structured store, and custom operations for creating new cells in the store, and getting or changing the values of existing cells)
- * Writer_monad (has to be parameterized on the type of the written data; use Writer1 as a simple predefined case)
- * Error_monad, with `throw err` and `catch u handler_function` operations (this has to be parameterized on the type of `err`; use Failure as a simple predefined case, where `type err = string`)
- * IO_monad (you don't need this in OCaml, but it works analagously to the IO monad in Haskell, so it's handy for working with Haskell-written algorithms in OCaml)
- * Leaf_monad (leaf-labeled, binary trees)
- * and of course, Continuation_monad, with `callcc`, `reset`, `shift` and `abort` operations.
+ * `Identity_monad`
+ * `Maybe_monad`
+ * `List_monad`
+ * `Reader_monad` (has to be parameterized as above)
+ * `State_monad` (has to be parameterized as above)
+ * `Ref_monad` (a version of `State_monad` with a structured store, and custom operations for creating new cells in the store, and getting or changing the values of existing cells)
+ * `Writer_monad` (has to be parameterized on the type of the written data; use `Writer1` as a simple predefined case)
+ * `Error_monad`, with `throw err` and `catch u handler_function` operations (this has to be parameterized on the type of `err`; use `Failure` as a simple predefined case, where `type err = string`)
+ * `IO_monad` (you don't need this in OCaml, but it works analagously to the `IO` monad in Haskell, so it's handy for working with Haskell-written algorithms in OCaml)
+ * `Tree_monad` (leaf-labeled, binary trees)
+ * and of course, `Continuation_monad`, with `callcc`, `reset`, `shift` and `abort` operations.