Согласно 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.