Beweisen die Funktorgesetze die vollständige Erhaltung der Struktur?

8

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 f :: a -> b und ihre inverse g :: b -> a then %Vor%

Ich war nicht in der Lage, eine Implementierung von 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?

    
kqr 15.05.2014, 10:19
quelle

1 Antwort

13

Tatsächlich folgt Ihr "drittes" Funktorgesetz direkt aus den tatsächlichen Funktorgesetzen und der Tatsache, dass f . g ≡ id :

%Vor%

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.

    
fizruk 15.05.2014, 10:24
quelle