rel8-1.1.0.0: src/Rel8/Column.hs
{-# language DataKinds #-}
{-# language StandaloneKindSignatures #-}
{-# language TypeFamilies #-}
module Rel8.Column
( Column
, TColumn
)
where
-- base
import Data.Kind ( Type )
import Prelude ()
-- rel8
import Rel8.FCF ( Eval, Exp )
import qualified Rel8.Schema.Kind as K
import Rel8.Schema.Result ( Result )
-- | This type family is used to specify columns in 'Rel8able's. In @Column f
-- a@, @f@ is the context of the column (which should be left polymorphic in
-- 'Rel8able' definitions), and @a@ is the type of the column.
type Column :: K.Context -> Type -> Type
type family Column context a where
Column Result a = a
Column context a = context a
data TColumn :: K.Context -> Type -> Exp Type
type instance Eval (TColumn f a) = Column f a