@Richard Gibson not sure you can encode contravariance in instance methods. We also use extensions in Arrow to provide those kinds of methods because we have not been able to encode them as instance methods.
For example:
fun <T> Option<T>.getOrElse(default: () -> T): T = ...
which in Scala is an instance method that looks like:
def getOrElse[B >: A](default: => B): B = ...