1{-# language DataKinds #-}
2{-# language FlexibleContexts #-}
4{-# language LambdaCase #-}
5{-# language MultiParamTypeClasses #-}
6{-# language StandaloneKindSignatures #-}
7{-# language TypeFamilies #-}
8{-# language UndecidableInstances #-}
10module Rel8.Column.Maybe
16import Data.Kind ( Type )
20import Rel8.Aggregate ( Aggregate )
21import Rel8.Expr ( Expr )
22import Rel8.Kind.Context ( SContext(..), Reifiable( contextSing ) )
23import Rel8.Schema.Context ( Col )
24import Rel8.Schema.HTable.Maybe ( HMaybeTable )
25import qualified Rel8.Schema.Kind as K
26import Rel8.Schema.Name ( Name )
27import Rel8.Schema.Reify ( Reify, hreify, hunreify )
28import Rel8.Schema.Result ( Result )
30 ( Table, Columns, Context, fromColumns, toColumns
31 , Unreify, reify, unreify
33import Rel8.Table.Maybe ( MaybeTable )
34import Rel8.Table.Recontextualize ( Recontextualize )
37-- | Nest a 'Maybe' value within a 'Rel8able'. @HMaybe f a@ will produce a
38-- 'MaybeTable' @a@ in the 'Expr' context, and a 'Maybe' @a@ in the 'Result'
40type HMaybe :: K.Context -> Type -> Type
41type family HMaybe context where
42 HMaybe (Reify context) = AHMaybe context
43 HMaybe Aggregate = MaybeTable
44 HMaybe Expr = MaybeTable
45 HMaybe Name = MaybeTable
49type AHMaybe :: K.Context -> Type -> Type
50newtype AHMaybe context a = AHMaybe (HMaybe context a)
53instance Reifiable context => Functor (AHMaybe context) where
54 fmap = smapMaybe contextSing
57instance (Reifiable context, Table (Reify context) a) =>
58 Table (Reify context) (AHMaybe context a)
60 type Context (AHMaybe context a) = Reify context
61 type Columns (AHMaybe context a) = HMaybeTable (Columns a)
62 type Unreify (AHMaybe context a) = HMaybe context (Unreify a)
64 fromColumns = sfromColumnsMaybe contextSing
65 toColumns = stoColumnsMaybe contextSing
66 reify proof = fmap fmap reify proof . AHMaybe
67 unreify proof = (\(AHMaybe a) -> a) . fmap fmap unreify proof
71 ( Reifiable context, Reifiable context'
72 , Recontextualize (Reify context) (Reify context') a a'
87 SAggregate -> \f (AHMaybe a) -> AHMaybe (fmap f a)
88 SExpr -> \f (AHMaybe a) -> AHMaybe (fmap f a)
89 SResult -> \f (AHMaybe a) -> AHMaybe (fmap f a)
90 SName -> \f (AHMaybe a) -> AHMaybe (fmap f a)
91 SReify context -> \f (AHMaybe a) -> AHMaybe (smapMaybe context f a)
94sfromColumnsMaybe :: Table (Reify context) a
96 -> HMaybeTable (Columns a) (Col (Reify context))
98sfromColumnsMaybe = \case
99 SAggregate -> AHMaybe . fmap (fromColumns . hreify) . fromColumns . hunreify
100 SExpr -> AHMaybe . fmap (fromColumns . hreify) . fromColumns . hunreify
101 SResult -> AHMaybe . fmap (fromColumns . hreify) . fromColumns . hunreify
102 SName -> AHMaybe . fmap (fromColumns . hreify) . fromColumns . hunreify
105 smapMaybe context (fromColumns . hreify) .
106 sfromColumnsMaybe context .
110stoColumnsMaybe :: Table (Reify context) a
113 -> HMaybeTable (Columns a) (Col (Reify context))
114stoColumnsMaybe = \case
116 hreify . toColumns . fmap (hunreify . toColumns) . (\(AHMaybe a) -> a)
118 hreify . toColumns . fmap (hunreify . toColumns) . (\(AHMaybe a) -> a)
120 hreify . toColumns . fmap (hunreify . toColumns) . (\(AHMaybe a) -> a)
122 hreify . toColumns . fmap (hunreify . toColumns) . (\(AHMaybe a) -> a)
125 stoColumnsMaybe context .
126 smapMaybe context (hunreify . toColumns) .
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