module Pandora.Pattern.Functor.Monoidal where import Pandora.Pattern.Functor.Semimonoidal (Semimonoidal) import Pandora.Paradigm.Primary.Functor.Proxy (Proxy) type family Unit (p :: * -> * -> *) = r | r -> p class Semimonoidal p source target t => Monoidal p q source target t where unit :: Proxy source -> p (q (Unit target) a) (t a)