Чередование частичных функций с andThen в Scala

Давайте использовать примеры из Daily Scala:

type PF = PartialFunction[Int,Int]

val pf1 : PF = {case 1 => 2}                      

val pf2 : PF = {case 2 => 3}                      

и давайте добавим:

val pf3 : PF = {case 3 => 4}

и тогда работает как положено здесь:

pf1 andThen pf2 isDefinedAt(x)

возвращаетсяtrue тогда и только тогдаx == 1 (фактически,pf2 не обязательно должен быть PartialFunction)

Однако я ожидал, что:

pf1 andThen pf3 isDefinedAt(x)

вернетсяfalse для всехx (то есть, если pf1 определен, проверьте pf3), но он не проверяет и только проверяет pf1.

В конце,pf1 andThen pf3 lift(x) всегда приводить к MatchError. Я предпочел бы получить None ... Я могу получить это поведение, подняв каждую функцию, например, вpf1.lift(x).flatMap(pf3.lift) но есть ли более простой способ использования чистого API PartialFunction? (и не поднимая каждую частичную функцию в отдельности?)

Ответы на вопрос(3)

Ваш ответ на вопрос