Это действительно просто немного неудобное имя для конкретного плагина для компилятора Scala, с которым вы связались. Я не думаю, что это имеет какое-то значение для себя, но оно как бы подходит для его цели.
Что плагин делает, так это обеспечить альтернативный синтаксис обычного обходного пути Scala для типа lambdas, который использует функцию языка, называемую type projections.
Скажите, что вы хотели реализовать Functor
для Either
. Теперь Functor
требует вид * -> *
, тогда как Either
имеет вид * -> * -> *
. Поэтому нам нужно сначала исправить первый аргумент и затем предоставить реализацию частично примененного конструктора типов. Единственный способ, которым Вы можете сделать это в «обычном» Scala заключается в следующем:
implicit def eitherIsFunctor[A]: Functor[{type λ[X] = Either[A, X]}#λ] = { ... }
где {type λ[X] = Either[A, X]}
является анонимным структурным типом, который только непосредственно используется для «проекта из» λ
, типа мы на самом деле хотим. В Haskell, вы могли бы просто сказать
instance Functor (Either a) where ...
где Either
частично применяется (и a
количественно над автоматически).
Плагина позволяет заменить проекцию с чем-то, что больше похоже на обычном частичное применение в Scala, а именно Either[A, ?]
, вместо едва понятных {type λ[X] = Either[A, X]}#λ
(а также обеспечивает лямбды общего типа, я думаю, всегда путем преобразования их к анонимным типам и проекциям).
Это именно то, что они назвали своим плагином. Это не концепция FP. – 4castle
Есть [виды] (https://en.wikipedia.org/wiki/Kind_ (type_theory)), и есть [прогнозы] (https://en.wikipedia.org/wiki/Projection_ (математика)). Я не думаю, что это означает что-то конкретное. – Bergi