on 0857ffb help sign in
43 lines 1.3 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.Maybe
11 ( HMaybeTable(..)
12 , HMaybeNullifiable
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 ( HConstrainTag, HNullifiable )
24import Rel8.Schema.HTable ( HTable )
25import Rel8.Schema.HTable.Identity ( HIdentity(..) )
26import qualified Rel8.Schema.Kind as K
27import Rel8.Schema.Spec ( Spec( Spec ) )
28import Rel8.Type.Tag ( MaybeTag )
29import Rel8.Schema.HTable.Nullify ( HNullify )
32type HMaybeTable :: K.HTable -> K.HTable
33data HMaybeTable table context = HMaybeTable
34 { htag :: HIdentity ('Spec '["isJust"] 'Required (Maybe MaybeTag)) context
35 , hjust :: HNullify table context
36 }
37 deriving stock Generic
38 deriving anyclass HTable
41type HMaybeNullifiable :: K.HContext -> Constraint
42class (HNullifiable context, HConstrainTag context MaybeTag) => HMaybeNullifiable context
43instance (HNullifiable context, HConstrainTag context MaybeTag) => HMaybeNullifiable context