Una buena practica de programación es realizar funciones atómicas que luego se puedan reutilizar. Esto nos permite reutilizarlas como parte de otras funciones y hasta como composiciones de funciones. Con este espíritu fueron creadas las funciones compose y andThen en scala.
Con compose puedo componer dos funciones, es decir que se ejecute una y luego con el resultado de la misma ejecutar la segunda función. Sería algo así: f(g(x))
scala> val fComposeG = f _ compose g _
fComposeG: (String) => java.lang.String = <function>
scala> fComposeG("yay")
res0: java.lang.String = f(g("yay"))
De la misma manera funciona andThen pero en orden de ejecución diferente. Es decir:
scala> val fAndThenG = f _ andThen g _
fAndThenG: (String) => java.lang.String = <function>
scala> fAndThenG("yay")
res1: java.lang.String = g(f(yay))
Dejo link:
https://twitter.github.io/scala_school/pattern-matching-and-functional-composition.html