I would like to do something like this with the new Scala Dotty compiler:
trait Monad[M[A]] (underlyingValue:A) { def bind[A, B](f: A => M[B]): M[B] }