Подпись конструктора типа Functor
показывает, что он параметризован другим, унарным конструктором типа F
:
trait Functor[F[_]] extends InvariantFunctor[F]
Ни R => A
, ни Function1[R,A]
не являются конструкторами типов; они не принимают параметров.
Однако в:
type λ[α] = (R) => α
λ
- это конструктор типа, принимающий один параметр, α
. (R
уже определен в этом контексте.)
Синтаксис ({type λ[α]=(R) => α})#λ
известен как лямбда-тип. Это синтаксический прием, позволяющий создавать псевдоним типа внутри строки и ссылаться на него через проекцию, поэтому все выражение можно использовать там, где требуется тип.