raulraja
10/10/2017, 7:46 PMderiving. for example:
interface Functor<F<_>> {
fun <A, B> map(fa: F<A>, f: (A) -> B): F<B>
fun <A, B> lift(f: (A) -> B): (F<A>) -> F<B> =
{ fa: F<A> ->
map(fa, f)
}
}
template class ListFunctor : Functor<List>
//enforces List<A> to implement `map` but gets `lift` for free in its applied //monomorfic version instead of an extension