on 379b492 help sign in
rel8/src/Rel8/Table/Cols.hs
50 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(..) )
26type Cols :: K.Context -> K.HTable -> Type
27newtype Cols context columns = Cols (columns context)
30instance (HTable columns, context ~ context') =>
31 Table context' (Cols context columns)
32 where
33 type Columns (Cols context columns) = columns
34 type Context (Cols context columns) = context
35 type FromExprs (Cols context columns) = Cols Result columns
36 type Transpose to (Cols context columns) = Cols to columns
38 toColumns (Cols a) = a
39 fromColumns = Cols
41 toResult (Cols a) = a
42 fromResult = Cols
45fromCols :: Table context a => Cols context (Columns a) -> a
46fromCols (Cols a) = fromColumns a
49toCols :: Table context a => a -> Cols context (Columns a)
50toCols = Cols . toColumns