Jak w temacie. Dla nie Haskelowców: zapis F a c
oznacza że F przymuje dwa typy generycne (kursywą bo w Haskelu mówi się o typach parametryzowanych, a nie o generykach).
Po Scallowemu byłoby to:
def myCompose[A,B,C](f1: F[B,C], f2: F[A,B]): F[A,C]
def myAndThen[A,B,C](f1: F[A,B], f2: F[B,C]): F[A,C]
A po kotlinowemu pewniem cos w rodzaju:
fun myCompose<A,B,C>(f1: F<B,C>, f2: F<A,B>): F<A,C>
fun myAndThen<A,B,C>(f1: F<A,B>, f2: F<B,C>): F<A,C>
Jak ktoś potrzebuje konkretniejszy przykład to można uznać że F[A,C]
to Function1[A, C]
czyli A => C
Wtedy pytanie upraszcza się czy wolimy compose
czy andThen
def compose[A](g: (A) => T1): (A) => R
def andThen[A](g: (R) => A): (T1) => A