Ich glaube der Hauptgrund, dass diese nicht Functor
Instanzen sind, ist, dass Sie noch keinen Code-Review eingereicht haben, um sie so zu machen. Sie können ein Ticket unter Trac einreichen und dann einen Code-Review unter Phabricator einreichen. Der bevorzugte Workflow von Phabricator (mit Arcanist) sowie weitere Details finden Sie unter here.
Während Sie das tun, sollten Sie wahrscheinlich auch Instanzen von Applicative
und Monad
. Sie sollten auch Foldable
und Traversable
Instanzen für sie in Data.Foldable
bzw. Data.Traversable
hinzufügen.
Wenn Sie wollen, dass ich erraten, warum niemand sonst tat dies:
Während Sum
und Product
Dinge jeglicher Art halten kann, die Monoid
Instanzen nur Sinn für Num
Instanzen machen. Der Typ von fmap
fühlt sich daher etwas merkwürdig allgemein an. Dies ist jedoch kein wirklich guter Grund, sie nicht zu Functor
Instanzen zu machen.
Mein Anwendungsfall für 'Functor' ist z.B. 'fromIntegral <$> s'. Und ich denke, etwas in 'base' zu ändern bedeutet nicht nur, einen Patch zu senden: https://wiki.haskell.org/Library_submissions – phadej
@phadej, was ich sagen wollte ist, dass du recht hast; Sie müssen die Bibliotheksliste per E-Mail senden. Aber es ist fast sicher, dass es genehmigt wird. Es gibt eine allgemeine Ansicht, dass, wenn es genau eine vernünftige Möglichkeit gibt, einen Typ zu einer Instanz einer Klasse zu machen, dies am Definitionspunkt erfolgen sollte, um Waisen zu vermeiden. – dfeuer
Ich wette, das ist Absicht. Es geht irgendwie gegen den Geist von 'Functor', wenn es nur Sinn macht, mit einer 'Num'-Instanz innerhalb zu enden, und es gibt keine Möglichkeit, diese Beschränkung mit der'Functor'-Typklasse auszudrücken, zu der' base' gehört. –