+ * module T_maker(
+ * (* A sig...end block specifies the type of a module
+ * * What we're doing here is specifying the type of the
+ * module parameter that will choose
+ * whether b = list or b = option or b = reader...
+ * This module parameter may supply values as well as types *)
+ * Parm: sig
+ * type ('a) b
+ * end
+ * ) =
+ * (* A struct...end block gives a module value
+ * What we're doing here is building a new module that makes
+ * use of the module that was supplied as Parm *)
+ * struct
+ * type ('a) t = 'a -> ('a) Parm.b