`join` также является функцией endofunctor? - PullRequest
0 голосов
/ 03 декабря 2018

Каждая монада является эндофунктором.

bind монады является композицией fmap, а join.

fmap является функцией эндофунктора.

Тогда можно ли сказать, что join также является функцией endofunctor?

1 Ответ

0 голосов
/ 03 декабря 2018

Endofunctor - это пара отображений: одно, которое отображает тип на другой тип, и другое, которое отображает функцию на другую функцию.В этом смысле endofunctor «имеет» fmap, так как fmap является отображением функции на функцию.

Монада - это триплет, состоящий из endofunctor и двух естественных преобразований.Одним из естественных преобразований является return :: a -> m a.Другой в Хаскеле - (>>=) :: m a -> (a -> m b) -> m b.join ms = ms >>= id, но мы могли бы также легко сказать, что join :: m (m a) -> m a - это естественное преобразование, связанное с монадой, и что m >>= f = join (fmap f m).В этом случае монада (не endofunctor) "имеет" join в качестве функции.

...