Согласно Haskell wikibook, Monad
называется m
является Functor
с двумя дополнительными операциями:
unit :: a -> m a
join :: m (m a) -> m a
Это хорошо, но у меня есть что-то немного другое. Глядя на детали gory, у меня есть тип, который имеет хорошие функции unit
и join
, но его fmap
не очень хорошо себя ведет (fmap g . fmap f
не обязательно fmap (g.f)
). Из-за этого его нельзя сделать экземпляром Monad
. Тем не менее, я хотел бы предоставить ему как можно больше общих функций.
Итак, мой вопрос: какие теоретические структуры категорий похожи на монады, поскольку они имеют unit
и join
?
Я понимаю, что на некотором уровне вышеупомянутый вопрос не определен. Для монад определения unit
и join
имеют смысл только в терминах определения fmap
. Без fmap
вы не можете определить какое-либо из законов монады, поэтому любые определения unit
/join
будут одинаково "действительными". Поэтому я ищу функции, отличные от fmap
, чтобы иметь смысл определять некоторые "немонадные" законы для этих функций unit
и join
.