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?
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
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.
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!
Tags und Links scala haskell functional-programming functor