{-# language DataKinds #-}
{-# language FlexibleInstances #-}
{-# language FunctionalDependencies #-}
{-# language StandaloneKindSignatures #-}
{-# language TypeFamilies #-}
{-# language UndecidableInstances #-}
{-# language UndecidableSuperClasses #-}
module Rel8.Table.Recontextualize
( Recontextualize
)
where
import Data.Functor.Identity ( Identity )
import Data.Kind ( Constraint, Type )
import Prelude ()
import Rel8.Schema.Context ( Col )
import Rel8.Schema.Context.Label ( Labelable )
import Rel8.Schema.HTable ( HTable )
import qualified Rel8.Schema.Kind as K
import Rel8.Schema.Null ( Sql )
import Rel8.Schema.Result ( Result )
import Rel8.Table ( Table, Congruent )
import Rel8.Type ( DBType )
type Recontextualize :: K.Context -> K.Context -> Type -> Type -> Constraint
class
( Table from a
, Table to b
, Congruent a b
, Recontextualize from from a a
, Recontextualize to to b b
, Recontextualize to from b a
) => Recontextualize from to a b
| a -> from
, b -> to
, a to -> b
, b from -> a
instance Sql DBType a => Recontextualize Result Result (Identity a) (Identity a)
instance HTable t => Recontextualize from to (t (Col from)) (t (Col to))
instance
( Recontextualize from to a1 b1
, Recontextualize from to a2 b2
, Labelable from
, Labelable to
)
=> Recontextualize from to (a1, a2) (b1, b2)
instance
( Recontextualize from to a1 b1
, Recontextualize from to a2 b2
, Recontextualize from to a3 b3
, Labelable from, Labelable to
)
=> Recontextualize from to (a1, a2, a3) (b1, b2, b3)
instance
( Recontextualize from to a1 b1
, Recontextualize from to a2 b2
, Recontextualize from to a3 b3
, Recontextualize from to a4 b4
, Labelable from, Labelable to
)
=> Recontextualize from to (a1, a2, a3, a4) (b1, b2, b3, b4)
instance
( Recontextualize from to a1 b1
, Recontextualize from to a2 b2
, Recontextualize from to a3 b3
, Recontextualize from to a4 b4
, Recontextualize from to a5 b5
, Labelable from, Labelable to
)
=> Recontextualize from to (a1, a2, a3, a4, a5) (b1, b2, b3, b4, b5)