1{-# language DataKinds #-}
2{-# language FlexibleContexts #-}
3{-# language LambdaCase #-}
4{-# language MultiParamTypeClasses #-}
5{-# language StandaloneKindSignatures #-}
6{-# language TypeFamilies #-}
8module Rel8.Column.Field
14import Data.Kind ( Type )
18import Rel8.Aggregate ( Aggregate, Col(..) )
19import Rel8.Expr ( Expr, Col(..) )
20import Rel8.Kind.Context ( SContext(..), Reifiable( contextSing ) )
21import Rel8.Kind.Necessity
22 ( Necessity( Required, Optional )
23 , SNecessity( SRequired, SOptional )
24 , KnownNecessity, necessitySing
26import Rel8.Schema.HTable.Identity ( HIdentity( HIdentity ) )
27import Rel8.Schema.Insert ( Insert, Col(..) )
28import qualified Rel8.Schema.Kind as K
29import Rel8.Schema.Name ( Name(..), Col(..) )
30import Rel8.Schema.Null ( Sql )
31import Rel8.Schema.Reify ( Reify, Col(..) )
32import Rel8.Schema.Result ( Col( Result ), Result )
33import Rel8.Schema.Spec ( Spec( Spec ) )
35 ( Table, Columns, Context, fromColumns, toColumns
36 , Unreify, reify, unreify
38import Rel8.Table.Recontextualize ( Recontextualize )
39import Rel8.Type ( DBType )
42type Field :: K.Context -> Necessity -> Type -> Type
43type family Field context necessity a where
44 Field (Reify context) necessity a = AField context necessity a
45 Field Aggregate _necessity a = Aggregate (Expr a)
46 Field Expr _necessity a = Expr a
47 Field Insert 'Required a = Expr a
48 Field Insert 'Optional a = Maybe (Expr a)
49 Field Name _necessity a = Name a
50 Field Result _necessity a = a
53type AField :: K.Context -> Necessity -> Type -> Type
54newtype AField context necessity a = AField (Field context necessity a)
57instance (Reifiable context, KnownNecessity necessity, Sql DBType a) =>
58 Table (Reify context) (AField context necessity a)
60 type Context (AField context necessity a) = Reify context
61 type Columns (AField context necessity a) = HIdentity ('Spec '[""] necessity a)
62 type Unreify (AField context necessity a) = Field context necessity a
64 fromColumns (HIdentity (Reify a)) = sfromColumn contextSing a
65 toColumns = HIdentity . Reify . stoColumn contextSing necessitySing
67 unreify _ (AField a) = a
71 ( Reifiable context, Reifiable context'
72 , KnownNecessity necessity, Sql DBType a
77 (AField context necessity a)
78 (AField context' necessity a)
83 -> Col context ('Spec labels necessity a)
84 -> AField context necessity a
86 SAggregate -> \(Aggregation a) -> AField a
87 SExpr -> \(DB a) -> AField a
88 SResult -> \(Result a) -> AField a
90 RequiredInsert a -> AField a
91 OptionalInsert a -> AField a
92 SName -> \(NameCol a) -> AField (Name a)
93 SReify context -> \(Reify a) -> AField (sfromColumn context a)
98 -> SNecessity necessity
99 -> AField context necessity a
100 -> Col context ('Spec labels necessity a)
102 SAggregate -> \_ (AField a) -> Aggregation a
103 SExpr -> \_ (AField a) -> DB a
104 SResult -> \_ (AField a) -> Result a
106 SRequired -> \(AField a) -> RequiredInsert a
107 SOptional -> \(AField a) -> OptionalInsert a
108 SName -> \_ (AField (Name a)) -> NameCol a
110 \necessity (AField a) -> Reify (stoColumn context necessity a)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list