MonadErrorSyntax_2

).fold[B](ifEmpty: => B)(f: A => B): B
OptionT(...).getOrElseF(default: => F[A])(implicit F: Monad[F]): F[A]

) emap (  _ \/> new Exception("error!!") )

\/>

final def \/>[E](e: => E): E \/ A = o.toRight(self)(e)

def OptionInstances#toRight[A, E](oa: Option[A])(e: => E): E \/ A = oa match {
  case Some(a) => \/-(a)
  case None    => -\/(e)
}

//ほんで
/** A left disjunction
 *
 * Often used to represent the failure case of a result
 */
final case class -\/[+A](a: A) extends (A \/ Nothing)

/** A right disjunction
 *
 * Often used to represent the success case of a result
 */
final case class \/-[+B](b: B) extends (Nothing \/ B)