  ('a -&gt; 'b io) -&gt; ('b -&gt; 'c io) -&gt; ('c -&gt; 'd io) -&gt; 'a -&gt; unit = &lt;fun&gt;

# satisfies_identity_law some_effect 123;;
true
- : unit = ()
# satisfies_identity_law some_other_effect 123;;
true
- : unit = ()
# satisfies_identity_law yet_another_effect 123;;
true
- : unit = ()

# satisfies_associative_law some_effect some_other_effect yet_another_effect 123;;
true
- : unit = ()</code></pre><p>As you can see, monads are very useful for <code>IO</code>. Haskell and Purescript more or less