Dies ist in der Tat nur ein leicht peinlicher Name für das spezifische Plugin für den Scala-Compiler, mit dem Sie verbunden sind. Ich denke nicht, dass es für sich selbst von Bedeutung ist, aber es entspricht seinem Zweck.
Was das Plugin tut, ist eine alternative Syntax zu Scala üblichen Workaround für Typ Lambdas, die eine Sprachfunktion namens type projections verwendet.
Nehmen wir an, Sie wollten Functor
für Either
implementieren. Jetzt erfordert Functor
Art * -> *
, während Either
Art * -> * -> *
hat. Daher müssen wir zuerst das erste Argument korrigieren und können dann die Implementierung für den teilweise angewandten Typkonstruktor bereitstellen. Die einzige Möglichkeit, dies in „normalen“ Scala tun kann, ist dies:
implicit def eitherIsFunctor[A]: Functor[{type λ[X] = Either[A, X]}#λ] = { ... }
wo {type λ[X] = Either[A, X]}
ein anonymer Strukturtyp ist, die nur unmittelbar verwendet werden, um „herausragen“ λ
, die Art, wie wir eigentlich wollen. In Haskell, könnte man einfach sagen
instance Functor (Either a) where ...
wo Either
teilweise angewendet wird (und a
wird automatisch quantifiziert über).
Das Plugin erlaubt es, den Vorsprung mit etwas zu ersetzen, die eher wie eine übliche Teil Anwendung in Scala sieht, nämlich Either[A, ?]
statt der kaum verständlich {type λ[X] = Either[A, X]}#λ
(und auch allgemeine Art lambdas, glaube ich, immer von ihnen nach unten Umwandlung anonyme Arten und Projektionen).
Das ist genau das, was sie ihr Plugin nannten. Es ist kein FP-Konzept. – 4castle
Es gibt [Arten] (https://en.wikipedia.org/wiki/Kind_ (type_theory)) und es gibt [Projektionen] (https://en.wikipedia.org/wiki/Projection_ (Mathematik)). Ich denke nicht, dass es etwas Spezifisches bedeutet. – Bergi