+ # Tree_monad.(orig_tree >>= fun a -> match a with
+ | 4 -> Some (Node (Leaf 2, Leaf 4))
+ | _ -> None);;
+ Error: This expression has type int Tree_monad.tree option
+ but an expression was expected of type ('a, 'b) Tree_monad.m
+
+You have to instead say something like this:
+
+ # Tree_monad.(orig_tree >>= fun a -> match a with
+ | 4 -> plus (unit 2) (unit 4)
+ | _ -> zero () );;
+ - : ('_a, int) Tree_monad.m = <abstr>
+
+
+Further Reading
+---------------
+
+* This is excellent, everyone should read: [Monad Transformers Step by Step](http://www.grabmueller.de/martin/www/pub/Transformers.pdf)
+
+* Read Part III of [All About Monads](http://web.archive.org/web/20071106232016/haskell.org/all_about_monads/html/introIII.html). This link is to an archived version, the main link to haskell.org seems to be broken. Some but not all of this site has been [absorbed into the Haskell wikibook](http://en.wikibooks.org/wiki/Haskell/Monad_transformers).
+
+
+How is all this related to our tree\_monadize function?
+-------------------------------------------------------
+
+
+Recall our earlier definition of `tree_monadize`, specialized for the Reader monad: