parameterized-0.3.0.0: src/Parameterized/Data/Monoid.hs
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PolyKinds #-}
module Parameterized.Data.Monoid
( module Parameterized.Data.Semigroup
, PMEmpty(..)
, PMonoid
) where
import Data.Kind
import Parameterized.Data.Semigroup
-- | Parameterized version of mempty in Monoid.
class PMEmpty (n :: k -> Type) (id :: k) | n -> id where
pmempty :: n id
-- | Parameterized version of Monoid.
class (PSemigroup n t u v, PMEmpty n id) => PMonoid n id t u v
instance (PSemigroup n t u v, PMEmpty n id) => PMonoid n id t u v