Хотя я не могу дать доказательства, я считаю, что это говорит о том, что из-за параметричности система типов обеспечивает исполнение второго закона, пока действует первый закон , Причина для указания обоих правил заключается в том, что в более общей математической настройке у вас может быть некоторая категория C , где вполне возможно определить «отображение» из C для себя (т.е. пара эндофункций на Obj ( C ) и Hom ( C ) соответственно), который подчиняется первому правилу, но не подчиняется второму правилу и, следовательно, не является функтором.
Помните, что Functor
s в Haskell являются эндофункторами в категории Hask , и даже все, что математически считается эндофунктором в Hask , может быть выражено в Haskell .. Ограничения параметрического полиморфизма исключают возможность указания функтора, который не ведет себя одинаково для всех объектов (типов), которые он отображает.
Исходя из этой цепочки , общий консенсус, по-видимому, заключается в том, что второй закон следует из первого для экземпляров Haskell Functor
. Эдвард Кметт говорит ,
Учитывая fmap id = id
, fmap (f . g) = fmap f . fmap g
следует из свободного
теорема для fmap.
Это было опубликовано в качестве отдельной статьи в газете давным-давно, но я забыл, где.