Ist da ein Functor, der kein gesetzestreuer Bewerber sein kann?
A recent question fragte allgemein nach den Grenzen zwischen verschiedenen Haskell-Klassen. Ich hatte die Idee dassHandler
als Beispiel für ein gültigesFunctor
ohnesinnvol Instanz vonApply
**, w
class Functor f => Apply f where
(<.>) :: f (a -> b) -> f a -> f b
-- optional bits omitted.
Ich konnte jedoch noch kein Beispiel für ein gültiges @ findeFunctor
das kann nicht zu einem @ gemacht werdgülti (wenn sinnlos) Instanz vonApply
. Die Tatsache, dassApply
ha hatte (siehe Update) aber ein einziges Gesetz,
(.) <$> u <.> v <.> w = u <.> (v <.> w)
scheint das ziemlich knifflig zu machen.
pigworker (Conor McBride) zuvor gab ein Beispiel einesFunctor
das ist nichtApplicative
, aber er verließ sich aufpure
, um dies zu tun, und das ist nicht verfügbar inApply
.
** Dann habe ich später gemerkt, dass es tatsächlich einen vernünftigen (wenn auch etwas seltsamen) @ geben könnApply
Instanz fürHandler
, das konzeptionell gleichzeitige Ausnahmen sammelt.
Edward Kmett hat jetztakzeptier zwei zusätzliche Gesetze, die ich für @ vorgeschlagen haApply
(um Optimierungen zu validieren, die ich an @ vorgenommen habApply (Coyoneda f)
instance):
x <.> (f <$> y) = (. f) <$> x <.> y
f <$> (x <.> y) = (f .) <$> x <.> y
s wäre interessant zu sehen, ob diese Zusätze die Antwort auf diese Frage verändern.