0

Я копал в FP и все, что его окружало, и я нашел концепцию любезного проектора, написанную где-то, без подробностей и объяснений.Что такое добрый проектор

Единственное, что я нашел, это github project, и я начинаю думать, если бы это касалось этого конкретного проекта или какой-то общей концепции в FP?

Итак, что такое добрый проектор? Почему это полезно? (если возможно, можете ли вы предоставить примеры, ресурсы и т. д.?)

+1

Это именно то, что они назвали своим плагином. Это не концепция FP. – 4castle

+2

Есть [виды] (https://en.wikipedia.org/wiki/Kind_ (type_theory)), и есть [прогнозы] (https://en.wikipedia.org/wiki/Projection_ (математика)). Я не думаю, что это означает что-то конкретное. – Bergi

ответ

4

Это действительно просто немного неудобное имя для конкретного плагина для компилятора 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]}#λ (а также обеспечивает лямбды общего типа, я думаю, всегда путем преобразования их к анонимным типам и проекциям).

+0

[Здесь] (http://underscore.io/blog/posts/2016/12/05/type-lambdas.html) хорошо сделанное введение в тему. – phg