class Catch[+T] { def either[U >: T](body: => U): Either[Throwable, U] = ??? } object Test { implicit class RichCatch[T](val c: Catch[T]) extends AnyVal { def validation[U >: T](u: => U): Either[Throwable, U] = c.either(u) } }