Прошу прощения, если эта тема избита и изъезжена вдоль и поперек, но мне стоило немалого труда "переварить" в себе, зачем это нужно. Начну с конца, вернее, с середины. В Скале функциональный трейт Function1 -- контрвариантный по аргументу, и ковариантный по результату.
trait Function1[-P, +R] {
def apply(p: P): R
}Это не какая-то экзотика, любая
(
Read more... )