extended-categories-0.1.0: Monoidal.hs
module Monoidal where
import Data.Tagged
import Data.Proxy
import Category
import Category.Product
import Functor
class (Category c, Functor (Mu c) ('KProxy :: KProxy ((k, k) -> k)), Domain (Mu c) ~ (c :><: c), Codomain (Mu c) ~ c, Object c (I c)) =>
Monoidal (c :: k -> k -> *) where
type Mu c
type I c :: k
(<>) :: forall c a1 a2 b1 b2. Monoidal c => c a1 b1 -> c a2 b2 -> c (FMap (Mu c) '(a1, a2)) (FMap (Mu c) '(b1, b2))
f <> g = proxy morphMap (Proxy :: Proxy (Mu c)) (f :><: g)