on db148ff help sign in
rel8/src/Rel8/Kind/Context.hs
89 lines 1.9 kB history raw
1{-# language DataKinds #-}
2{-# language GADTs #-}
3{-# language LambdaCase #-}
4{-# language StandaloneKindSignatures #-}
6module Rel8.Kind.Context
7 ( Reifiable( contextSing )
8 , SContext(..)
9 , sReifiable
10 , sLabelable
11 )
12where
14-- base
15import Data.Kind ( Constraint, Type )
16import Prelude ()
18-- rel8
19import Rel8.Aggregate ( Aggregate )
20import Rel8.Expr ( Expr )
21import Rel8.Schema.Dict ( Dict( Dict ) )
22import Rel8.Schema.Context ( Interpretation )
23import Rel8.Schema.Context.Label ( Labelable )
24import Rel8.Schema.Insert ( Insert )
25import Rel8.Schema.Kind ( Context )
26import Rel8.Schema.Name ( Name )
27import Rel8.Schema.Reify ( Reify )
28import Rel8.Schema.Result ( Result )
31type SContext :: Context -> Type
32data SContext context where
33 SAggregate :: SContext Aggregate
34 SExpr :: SContext Expr
35 SInsert :: SContext Insert
36 SName :: SContext Name
37 SResult :: SContext Result
38 SReify :: SContext context -> SContext (Reify context)
41type Reifiable :: Context -> Constraint
42class Interpretation context => Reifiable context where
43 contextSing :: SContext context
46instance Reifiable Aggregate where
47 contextSing = SAggregate
50instance Reifiable Expr where
51 contextSing = SExpr
54instance Reifiable Result where
55 contextSing = SResult
58instance Reifiable Insert where
59 contextSing = SInsert
62instance Reifiable Name where
63 contextSing = SName
66instance Reifiable context => Reifiable (Reify context) where
67 contextSing = SReify contextSing
70sReifiable :: SContext context -> Dict Reifiable context
71sReifiable = \case
72 SAggregate -> Dict
73 SExpr -> Dict
74 SInsert -> Dict
75 SName -> Dict
76 SResult -> Dict
77 SReify context -> case sReifiable context of
78 Dict -> Dict
81sLabelable :: SContext context -> Dict Labelable context
82sLabelable = \case
83 SAggregate -> Dict
84 SExpr -> Dict
85 SInsert -> Dict
86 SName -> Dict
87 SResult -> Dict
88 SReify context -> case sLabelable context of
89 Dict -> Dict