title: Class of monads in Dart
body: <p>In Haskell, the definition of the class <code>Monad</code> is as follows:</p>
  
  <pre class="lang-dart prettyprint-override"><code>class Monad m where
    (&gt;&gt;=) :: m a -&gt; (a -&gt; m b) -&gt; m b
    (&gt;&gt;) :: m a -&gt; m b -&gt; m b
    return :: a -&gt; m a
    fail :: String -&gt; m a
  </code></pre>
  
  <p>I want to express in Dart what the <code>m</code> in the above Haskell code says: every <code>Monad</code> class must have methods doing computations on objects of the same monad. Is it possible? How?</p>