0

Ich habe in FP und alles, was es umgibt graben, und ich fand das Konzept der Art Projektor irgendwo geschrieben, ohne Details oder Erklärungen.Was ist eine Art Projektor

Die einzige Sache, die ich fand, war diese github project, und ich fange an zu denken, wenn es sich auf dieses bestimmte Projekt oder auf irgendein allgemeines Konzept in FP bezog?

Also, was ist ein freundlicher Projektor? Warum ist es nützlich? (Wenn möglich, können Sie Beispiele, Ressourcen usw. bereitstellen?)

+1

Das ist genau das, was sie ihr Plugin nannten. Es ist kein FP-Konzept. – 4castle

+2

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

Antwort

4

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).

+0

[Hier ist] (http://underscore.io/blog/posts/2016/12/05/type-lambdas.html) ein gut gemachtes Intro über das Thema. – phg

Verwandte Themen