1{-# language DataKinds #-}
2{-# language LambdaCase #-}
3{-# language MultiParamTypeClasses #-}
4{-# language ScopedTypeVariables #-}
5{-# language StandaloneKindSignatures #-}
6{-# language TypeApplications #-}
7{-# language TypeFamilies #-}
8{-# language UndecidableInstances #-}
16import Data.Kind ( Type )
17import Data.Type.Equality ( (:~:)( Refl ) )
21import Rel8.Generic.Rel8able ( GColumns )
22import Rel8.Kind.Context ( SContext(..), Reifiable, contextSing )
23import Rel8.Schema.Context ( Col )
24import qualified Rel8.Schema.Kind as K
25import Rel8.Schema.Reify ( Reify, hreify, hunreify )
26import Rel8.Schema.Result ( Result, absurd )
28 ( Table, Columns, Context, fromColumns, toColumns
29 , Unreify, reify, unreify, coherence, congruence
31import Rel8.Table.ADT ( ADT( ADT ), ADTable, fromADT, toADT )
32import Rel8.Table.Rel8able ()
33import Rel8.Table.Recontextualize ( Recontextualize )
36type HADT :: K.Context -> K.Rel8able -> Type
37type family HADT context t where
38 HADT (Reify context) t = AHADT context t
39 HADT Result t = t Result
40 HADT context t = ADT t context
43type AHADT :: K.Context -> K.Rel8able -> Type
44newtype AHADT context t = AHADT (HADT context t)
47instance (ADTable t, Reifiable context) =>
48 Table (Reify context) (AHADT context t)
50 type Context (AHADT context t) = Reify context
51 type Columns (AHADT context t) = GColumns (ADT t)
52 type Unreify (AHADT context t) = HADT context t
54 fromColumns = sfromColumnsADT contextSing
55 toColumns = stoColumnsADT contextSing
57 unreify _ (AHADT a) = a
59 coherence = case contextSing @context of
60 SAggregate -> \Refl _ -> Refl
61 SExpr -> \Refl _ -> Refl
62 SName -> \Refl _ -> Refl
63 SResult -> \Refl -> absurd
64 SReify _ -> \Refl _ -> Refl
66 congruence = case contextSing @context of
67 SAggregate -> \_ _ -> Refl
70 SResult -> \Refl -> absurd
71 SReify _ -> \_ _ -> Refl
75 ( Reifiable context, Reifiable context'
85sfromColumnsADT :: ADTable t
87 -> GColumns (ADT t) (Col (Reify context))
89sfromColumnsADT = \case
90 SAggregate -> AHADT . ADT . hunreify
91 SExpr -> AHADT . ADT . hunreify
92 SName -> AHADT . ADT . hunreify
93 SResult -> AHADT . fromADT . ADT . hunreify
94 SReify context -> AHADT . sfromColumnsADT context . hunreify
97stoColumnsADT :: ADTable t
100 -> GColumns (ADT t) (Col (Reify context))
102 SAggregate -> hreify . (\(AHADT (ADT a)) -> a)
103 SExpr -> hreify . (\(AHADT (ADT a)) -> a)
104 SName -> hreify . (\(AHADT (ADT a)) -> a)
105 SResult -> hreify . (\(ADT a) -> a) . toADT . (\(AHADT a) -> a)
106 SReify context -> hreify . stoColumnsADT context . (\(AHADT a) -> 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