title: How to detect a Monad?
body: <p>Many of us don't have a background on functional programming, and much less on category theory algebra. So let's suppose that we need and therefore create a generic type like</p>
  
  <pre><code>data MySomething t = ....... 
  </code></pre>
  
  <p>Then we continue programming, and using <code>MySomething</code>. What evidences should alert us that <code>MySomething</code> is a monad, and that we have to make it one by writing <code>instance Monad MySomething ...</code> and defining <code>return</code> and <code>&gt;&gt;=</code> for it?</p>
  
  <p>Thanks.</p>
  
  <p>Edit: See also this question: <a href="https://stackoverflow.com/questions/21261427/is-chaining-operations-the-only-thing-that-the-monad-class-solves">is chaining operations the only thing that the monad class solves?</a>, and this answer <a href="https://stackoverflow.com/a/21813760/286335">a monad is an array of functions with helper operations</a></p>