Warum gibt es in Scala keine "Functor" Eigenschaft? [geschlossen]

8

In Scala haben die generischen Klassen wie Future , Option und List alle die Methoden map und flatMap . Soweit ich weiß, sind sie alle wie Funktoren in Haskell.

Ich habe mich nur gefragt, warum es in Scala kein Merkmal (Interface) namens Functor gibt.

Hat jemand Ideen dazu?

    
Hanfei Sun 17.05.2015, 15:52
quelle

2 Antworten

11

Wie würde ein solches Merkmal aussehen? Denken Sie daran, Funktor wird durch eine Funktion fmap bestimmt, die eine reguläre Funktion auf eine Funktion hebt, die auf "functoriale" Werte wirkt (oder alternativ eine reguläre Funktion auf Funktorinhalte anwendet). Das nächste, was mir einfällt, ist

%Vor%

Eine solche Definition ist nicht wirklich nützlich und relativ komplex. Merkmale haben nicht die notwendige Flexibilität, um Konzepte höherer Ordnung wie Funktoren zu abstrahieren.

Scala verfügt jedoch über Typenklassen, dh es ist möglich, Merkmale und implizite Parameter auf raffinierte Weise zu verwenden, um das Typklassenmuster zu implementieren:

%Vor%

Und genau das bietet scalaz .

Warum dies in der Standardbibliothek nicht vorhanden ist - weiß ich nicht. Vielleicht wurde das Typklassenmuster nicht sofort entdeckt, und die Bibliothek war bereits in diesem Moment entstanden. Vielleicht liegt es nur daran, dass es sich um etwas fortgeschrittene Konzepte handelt, die nicht wirklich zur Standardbibliothek gehören. Vielleicht etwas anderes.

    
Vladimir Matveev 17.05.2015, 16:10
quelle
4

Ich denke, die Annahme ist, dass jeder, der daran interessiert ist, Functor / Applicative / Monad / etc. ist besser bedient mit Scalaz. Nicht in der Standard-Bibliothek zu sein bedeutet, dass es sich freier entwickeln kann, nicht an den Scala-Release-Zeitplan usw. gebunden ist. Schau dir das an wie lange es gedauert hat, Monad extend Applicative in GHC zu machen!

    
Alexey Romanov 17.05.2015 18:16
quelle