title: What exactly makes Option a monad in Scala?
body: <p>I know what the monads are and how to use them. What I don't understand is <strong>what</strong> makes, let's say, <code>Option</code> a monad? </p>
  
  <p>In Haskell a monad <code>Maybe</code> is a monad because it's instantiated from <code>Monad</code> class (which has at least 2 necessary functions <code>return</code> and <code>bind</code> that makes class <code>Monad</code>, indeed, a monad). </p>
  
  <p>But in Scala we've got this:</p>
  
  <pre><code>sealed abstract class Option[+A] extends Product with Serializable { ... }
  trait Product extends Any with Equals { ... }
  </code></pre>
  
  <p>Nothing related to a monad.</p>
  
  <p>If I create my own class in Scala, will it be a monad by default? Why not?</p>