{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE PolyKinds #-} module Parameterized.Data.Monoid ( module Parameterized.TypeLevel , module Parameterized.Data.Semigroup , PMempty(..) , PMonoid ) where import Data.Kind import Parameterized.TypeLevel import Parameterized.Data.Semigroup -- | Parameterized version of mempty in Monoid. class PMempty (n :: k -> Type) (id :: k) where pmempty :: n id -- | Parameterized version of Monoid. type PMonoid n id t u v = (PMempty n id, PSemigroup n t u v)