a ja nie mogę dać dowodu, wierzę w to, że mówi się o tym, że z powodu parametricity system typów egzekwuje drugie prawo tak długo, jak obowiązuje pierwsze prawo. Powodem określenia obydwu reguł jest to, że w bardziej ogólnym ustawieniu matematycznym możesz mieć jakąś kategorię C, gdzie jest całkowicie możliwe zdefiniowanie dla siebie "odwzorowania" z siebie (tj. Pary endofunkcji na Obj (C) i hom (C) odpowiednio), która spełnia pierwszą zasadę, ale nie wykonuje się drugą zasadę, a zatem nie stanowią funktora.
Pamiętaj, że Functor
s w Haskell są endofunctors od kategorii Hask, a nawet wszystko, że matematycznie być uważane za endofunctor na HASK może być wyrażona w Haskell ... ograniczenia parametrycznych polimorfizmu wykluczać będącego potrafi określić funktor, który nie zachowuje się jednolicie dla wszystkich obiektów (typów), które mapuje.
Na podstawie this thread, ogólna zgoda wydaje się, że drugie prawo wynika z pierwszej dla instancji Haskell Functor
.Edward Kmett says,
Biorącfmap id = id
, fmap (f . g) = fmap f . fmap g
wynika z wolnego twierdzenia o FMapy.
Zostało to opublikowane w formie papierowej dawno temu, ale zapominam, gdzie.
Tutaj jest bardziej szczegółowy zapis na przejście od wolnego twierdzenia do drugiego prawa Fnuctor, https://github.com/quchen/articles/blob/master/second_functor_law.md – David
@David There's litero : "Fnuctor" -> "Functor" – fans656