on 2bfea63 help sign in
44 lines 1.4 kB history raw
1{-# language DataKinds #-}
2{-# language DeriveAnyClass #-}
3{-# language DeriveGeneric #-}
4{-# language DerivingStrategies #-}
5{-# language FlexibleInstances #-}
6{-# language StandaloneKindSignatures #-}
7{-# language UndecidableInstances #-}
8{-# language UndecidableSuperClasses #-}
10module Rel8.Schema.HTable.Either
11 ( HEitherTable(..)
12 , HEitherNullifiable
13 )
14where
16-- base
17import Data.Kind ( Constraint )
18import GHC.Generics ( Generic )
19import Prelude ()
21-- rel8
22import Rel8.Kind.Necessity ( Necessity( Required ) )
23import Rel8.Schema.Context.Nullify ( HNullifiable, HConstrainTag )
24import Rel8.Schema.HTable ( HTable )
25import Rel8.Schema.HTable.Identity ( HIdentity(..) )
26import Rel8.Schema.HTable.Nullify ( HNullify )
27import qualified Rel8.Schema.Kind as K
28import Rel8.Schema.Spec ( Spec( Spec ) )
29import Rel8.Type.Tag ( EitherTag )
32type HEitherTable :: K.HTable -> K.HTable -> K.HTable
33data HEitherTable left right context = HEitherTable
34 { htag :: HIdentity ('Spec '["isRight"] 'Required EitherTag) context
35 , hleft :: HNullify left context
36 , hright :: HNullify right context
37 }
38 deriving stock Generic
39 deriving anyclass HTable
42type HEitherNullifiable :: K.HContext -> Constraint
43class (HNullifiable context, HConstrainTag context EitherTag) => HEitherNullifiable context
44instance (HNullifiable context, HConstrainTag context EitherTag) => HEitherNullifiable context