title: Generic way to call `getOrElse` on monads
body: <p>I am new to scala-cats library,
  Initially I've created a generic code that combines monads according to a monoid I provide:</p>
  
  <pre><code>\\ implicitly uses cats catsDataMonoidForEither
  Monoid[Either].combine(Right("foo"), Left(new NullPointerException))
  \\ returns: Left(NullPointerException)
  
  \\ implicitly uses a monoid that I provided
  Monoid[Option[String]].combine(Some("foo"), Some("bar"), None)
  \\ returns: Some("foobar")
  </code></pre>
  
  <p>The point is that I get different monads (I want to be able to handle <code>Validated</code> and <code>Try</code> too), and I am looking for a <strong>generic</strong> way to "getOrElse" them according to the pre-defined bias of <s>the monad</s> any FP abstraction, something like that:</p>
  
  <pre><code>def getOrEmpty[M, A](monad: M[A])(implicit monadM: Monad[M], monoidA[A]): A = {
      // Method "magicallyGetOrElse" is supposed to get a monad,
      // if its is the biased side (Some, Right etc.) return the value,
      // else return the monad's A
      monadM.magicallyGetOrElse(monad)(monoidA.empty)
  </code></pre>
  
  <p>How can I do it functionally?</p>