Что такое Control.Category?

Если я узнаю, что что-то есть Monoid или Monad, я получаю все, чтобы использовать всевозможные функции fun, такие как foldMap, sequence или даже mapM. Они радуют меня.

Что я получу, если узнаю, что что-то есть Category? Я получаю удовольствие от перегрузки id и (.)?

Ответ 1

Я получаю удовольствие от перегрузки id и (.)?

Ну, вы также должны (должны) получить связанные с ними законы:

"identity/left" forall p .
                id . p = p
"identity/right"        forall p .
                p . id = p
"association"   forall p q r .
                (p . q) . r = p . (q . r)

В качестве побочного примечания: Причина, по которой вы не получаете, что многие забавные функции, такие как mapM или foldMap, заключаются в том, что говоря, что что-то есть категория, на самом деле очень мало говорит об этом. Наиболее полезными функциями я считаю те, которые определены в Control.Category, которые иногда упрощают чтение кода: >>> и <<<

Ответ 2

Control.Category - это всего лишь основная работа для Control.Arrow, а также то, откуда вы получаете удовольствие от функций.