digraph { node [shape=box]; Functor -> Applicative -> Monad; Apply -> Applicative; Semigroup -> Apply [constraint=false; style=dotted; arrowhead=none]; Apply [color=grey]; Applicative -> Alternative; Monad -> MonadPlus; Monad -> MonadFix; Semigroup -> Monoid; Monoid -> Applicative [constraint=false; style=dotted; arrowhead=none]; Monoid -> Category [constraint=false; style=dotted; arrowhead=none]; Monoid -> Alternative [style=dotted; arrowhead=none]; Monoid -> MonadPlus [style=dotted; arrowhead=none]; Category -> Arrow -> ArrowChoice; Arrow -> ArrowApply; Arrow -> ArrowLoop; Arrow -> ArrowZero -> ArrowPlus; {rank = same; Arrow; ArrowZero; ArrowPlus} Monoid -> ArrowPlus [style=dotted; arrowhead=none]; Monad -> ArrowApply [style=bold, arrowhead=none]; Monoid -> Foldable [style=dotted; arrowhead=none]; Monoid -> Monad [style=dotted; arrowhead=none]; Applicative -> Traversable [style=dotted; arrowhead=none]; Foldable -> Traversable; Functor -> Traversable; Comonad [color=grey]; Functor -> Comonad; }