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( A ) )
19import Rel8.Expr ( Expr, Col( E ) )
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, Insertion(..), Col( I ) )
28import qualified Rel8.Schema.Kind as K
29import Rel8.Schema.Name ( Name(..), Col( N ) )
30import Rel8.Schema.Null ( Sql )
31import Rel8.Schema.Reify ( Reify, Col(..) )
32import Rel8.Schema.Result ( Col( R ), 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 necessitySing 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 -> SNecessity necessity
84 -> Col context ('Spec labels necessity a)
85 -> AField context necessity a
87 SAggregate -> \_ (A a) -> AField a
88 SExpr -> \_ (E a) -> AField a
91 I (Value a) -> AField a
93 I Default -> AField Nothing
94 I (Value a) -> AField (Just a)
95 SName -> \_ (N a) -> AField a
96 SResult -> \_ (R a) -> AField a
98 \necessity (Reify a) -> AField (sfromColumn context necessity a)
103 -> SNecessity necessity
104 -> AField context necessity a
105 -> Col context ('Spec labels necessity a)
107 SAggregate -> \_ (AField a) -> A a
108 SExpr -> \_ (AField a) -> E a
110 SRequired -> \(AField a) -> I (Value a)
111 SOptional -> \(AField ma) -> I $ maybe Default Value ma
112 SName -> \_ (AField a) -> N a
113 SResult -> \_ (AField a) -> R a
115 \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