This is a personal mental model of how I would classify Haskell main type classes if
semigroupoids
were first-class.
Functor: <$>
- Apply:
<*>
,<.>
- Applicative:
pure
,return
- Bind:
join
,=<<
,<=<
- Applicative:
- Alternative (Alt):
<|>
,<!>
- Zero (Alternative):
zero
,empty
- Zero (Alternative):
- CoApply:
<@>
- CoApplicative:
copure
,extract
- Extend:
duplicate
- CoApplicative:
- SemiGroup:
<>
- Monoid:
empty
,mempty
- Monoid:
- SemiGroupoid:
>>>
- Category:
id
- Arrow:
arr
first
- Arrow:
- Category:
-
Plus -> Apply + Zero:
<+>
,mplus
(Left Distribution) -
Or -> Applicative + Zero:
<!>
,morelse
(Left Catch) -
Monad -> Bind + Applicative
-
MonadPlus -> Monad + Plus
-
MonadOr -> Monad + Or
-
CoMonad -> Extend + CoApplicative