{-# language DataKinds #-}
{-# language FlexibleContexts #-}
{-# language GADTs #-}
{-# language StandaloneKindSignatures #-}
module Rel8.Kind.Algebra
  ( Algebra( Product, Sum )
  , SAlgebra( SProduct, SSum )
  , KnownAlgebra( algebraSing )
  )
where
import Data.Kind ( Constraint, Type )
import Prelude ()
type Algebra :: Type
data Algebra = Product | Sum
type SAlgebra :: Algebra -> Type
data SAlgebra algebra where
  SProduct :: SAlgebra 'Product
  SSum :: SAlgebra 'Sum
type KnownAlgebra :: Algebra -> Constraint
class KnownAlgebra algebra where
  algebraSing :: SAlgebra algebra
instance KnownAlgebra 'Product where
  algebraSing :: SAlgebra 'Product
algebraSing = SAlgebra 'Product
SProduct
instance KnownAlgebra 'Sum where
  algebraSing :: SAlgebra 'Sum
algebraSing = SAlgebra 'Sum
SSum