{-# language FlexibleContexts #-}
{-# language StandaloneKindSignatures #-}
{-# language TypeFamilies #-}
module Rel8.Table.Alternative
  ( AltTable ( (<|>:) )
  , AlternativeTable ( emptyTable )
  )
where
import Data.Kind ( Constraint, Type )
import Prelude ()
import Rel8.Expr ( Expr )
import Rel8.Table ( Table )
type AltTable :: (Type -> Type) -> Constraint
class AltTable f where
  
  (<|>:) :: Table Expr a => f a -> f a -> f a
  infixl 3 <|>:
type AlternativeTable :: (Type -> Type) -> Constraint
class AltTable f => AlternativeTable f where
  
  emptyTable :: Table Expr a => f a