n -&gt; 'b option = &lt;fun&gt;

# let (&gt;&gt;=) a b = flat_map b a;;
val ( &gt;&gt;= ) : 'a option -&gt; ('a -&gt; 'b option) -&gt; 'b option = &lt;fun&gt;


# (* Another style of working with monads instead of flat_map is to use
     kliesli composition: *)
  let kliesli_compose f g a = f a &gt;&gt;= g;;
val kliesli_compose :
  ('a -&gt; 'b option) -&gt; ('b -&gt; 'c option) -&gt; 'a -&gt; 'c option = &lt;fun&gt;

# let (&gt;=&gt;) = kliesli_compose;;
val ( &gt;=&gt; ) : ('a -&gt; 'b option) -&gt; ('b -