on 97d89cf help sign in
rel8/src/Rel8/Table/Cols.hs
53 lines 1.2 kB history raw
1{-# language DataKinds #-}
2{-# language FlexibleInstances #-}
3{-# language MultiParamTypeClasses #-}
4{-# language StandaloneKindSignatures #-}
5{-# language TypeFamilies #-}
6{-# language UndecidableInstances #-}
8module Rel8.Table.Cols
9 ( Cols( Cols )
10 , fromCols
11 , toCols
12 )
13where
15-- base
16import Data.Kind ( Type )
17import Prelude
19-- rel8
20import qualified Rel8.Schema.Kind as K
21import Rel8.Schema.HTable ( HTable )
22import Rel8.Schema.Result ( Result )
23import Rel8.Table ( Table(..) )
24import Rel8.Table.Recontextualize ( Recontextualize )
27type Cols :: K.Context -> K.HTable -> Type
28newtype Cols context columns = Cols (columns context)
31instance (HTable columns, context ~ context') =>
32 Table context' (Cols context columns)
33 where
34 type Columns (Cols context columns) = columns
35 type Context (Cols context columns) = context
36 type FromExprs (Cols context columns) = Cols Result columns
38 toColumns (Cols a) = a
39 fromColumns = Cols
41 toResult (Cols a) = a
42 fromResult = Cols
45instance HTable t => Recontextualize from to (Cols from t) (Cols to t)
48fromCols :: Table context a => Cols context (Columns a) -> a
49fromCols (Cols a) = fromColumns a
52toCols :: Table context a => a -> Cols context (Columns a)
53toCols = Cols . toColumns