как Луис Мигель Мехия Суарес предложил в комментариях, вы можете использовать неявных кошек, как это:
import cats.syntax.option.catsSyntaxOptionId
//import cats.implicits._ //or you could import everything
object Example1 {
def foo(i: Option[Int]): Boolean = ???
def myFunction(a: Int, b: Int): Int =
if (foo(a.some)) 0 else b //a.some is from cats implicit
}
То, что вы не хотите делать, это расширить свою функцию допринимать больше значений только для того, чтобы тип соответствовал какой-либо внутренней реализации.
object Example2 {
def foo(i: Option[Int]): Boolean = ???
// don't take an option if you don't expect None
def myFunction(a: Option[Int], b: Int): Int =
if (foo(a)) 0 else b
}
Если вы не берете None в качестве параметра, то вполне нормально преобразовать значения явно, когда вам необходимо:
object Example3 {
def foo(i: Option[Int]): Boolean = ???
def myFunction(a: Int, b: Int): Int =
if (foo(Some(a))) 0 else b
}