In der Dokumentation für Data.Functor werden die folgenden zwei als Funktor angegeben Gesetze, an die sich alle Funktoren halten sollten.
%Vor% Wie meine Intuition mir sagt, dass Funktoren funktionieren sollten, ist, dass sie "strukturerhaltend" sein sollten, oder anders gesagt, wenn Sie eine Funktion Ich war nicht in der Lage, eine Implementierung von f :: a -> b
und ihre inverse g :: b -> a
then fmap
zu finden, die sich an die ersten beiden Gesetze hält und die zweite verletzt, aber das ist kaum ein Beweis. Kann mich jemand aufklären?
Tatsächlich folgt Ihr "drittes" Funktorgesetz direkt aus den tatsächlichen Funktorgesetzen und der Tatsache, dass f . g ≡ id
:
Und noch mehr: Haskell stellt sicher, dass, wenn das erste Gesetz für Functor
instance gilt, auch das zweite gilt (dies ist ein freies Theorem für den Typ von fmap
). I.e. Sie müssen nur fmap id ≡ id
law für Ihre Functor
-Instanz nachweisen, um sicherzustellen, dass sie gültig ist.
Tags und Links haskell functional-programming category-theory