module Sqel.Column where import Sqel.Class.Mods (AddMod (addMod), MapMod, amendMod) import Sqel.Data.Dd (Dd (Dd), DdK (DdK), Struct (Prim)) import Sqel.Data.Mods (Nullable (Nullable), PgDefault (PgDefault), PrimaryKey (PrimaryKey), SetTableName (SetTableName)) import Sqel.Data.PgTypeName (PgTableName) import Sqel.Data.Sql (Sql) import Sqel.Names.Rename (Rename, rename) import Sqel.Names.Set (SetName) pk :: AddMod PrimaryKey s0 s1 => Dd s0 -> Dd s1 pk :: forall (s0 :: DdK) (s1 :: DdK). AddMod PrimaryKey s0 s1 => Dd s0 -> Dd s1 pk = forall p (s0 :: DdK) (s1 :: DdK). AddMod p s0 s1 => p -> Dd s0 -> Dd s1 addMod PrimaryKey PrimaryKey class MkNullable s0 s1 | s0 -> s1 where mkNullable :: Dd s0 -> Dd s1 instance MkNullable ('DdK sel p a 'Prim) ('DdK sel p (Maybe a) 'Prim) where mkNullable :: Dd ('DdK sel p a 'Prim) -> Dd ('DdK sel p (Maybe a) 'Prim) mkNullable (Dd SelW sel sel Mods mods p DdStruct s1 s) = forall (sel :: Sel) (mods :: [*]) (s1 :: Struct) a. SelW sel -> Mods mods -> DdStruct s1 -> Dd ('DdK sel mods a s1) Dd SelW sel sel Mods mods p DdStruct s1 s nullable :: ∀ s0 s1 s2 . AddMod Nullable s0 s1 => MkNullable s1 s2 => Dd s0 -> Dd s2 nullable :: forall (s0 :: DdK) (s1 :: DdK) (s2 :: DdK). (AddMod Nullable s0 s1, MkNullable s1 s2) => Dd s0 -> Dd s2 nullable = forall (s0 :: DdK) (s1 :: DdK). MkNullable s0 s1 => Dd s0 -> Dd s1 mkNullable forall b c a. (b -> c) -> (a -> b) -> a -> c . forall p (s0 :: DdK) (s1 :: DdK). AddMod p s0 s1 => p -> Dd s0 -> Dd s1 addMod Nullable Nullable nullableAs :: ∀ name s0 s1 s2 . AddMod Nullable s0 s1 => MkNullable s1 s2 => Rename s2 (SetName s2 name) => Dd s0 -> Dd (SetName s2 name) nullableAs :: forall (name :: Symbol) (s0 :: DdK) (s1 :: DdK) (s2 :: DdK). (AddMod Nullable s0 s1, MkNullable s1 s2, Rename s2 (SetName s2 name)) => Dd s0 -> Dd (SetName s2 name) nullableAs = forall (s0 :: DdK) (s1 :: DdK). Rename s0 s1 => Dd s0 -> Dd s1 rename forall b c a. (b -> c) -> (a -> b) -> a -> c . forall (s0 :: DdK) (s1 :: DdK) (s2 :: DdK). (AddMod Nullable s0 s1, MkNullable s1 s2) => Dd s0 -> Dd s2 nullable tableName :: ∀ s0 s1 . MapMod SetTableName s0 s1 => PgTableName -> Dd s0 -> Dd s1 tableName :: forall (s0 :: DdK) (s1 :: DdK). MapMod SetTableName s0 s1 => PgTableName -> Dd s0 -> Dd s1 tableName PgTableName name = forall p (s0 :: DdK) (s1 :: DdK). MapMod p s0 s1 => p -> Dd s0 -> Dd s1 amendMod (PgTableName -> SetTableName SetTableName PgTableName name) pgDefault :: AddMod PgDefault s0 s1 => Sql -> Dd s0 -> Dd s1 pgDefault :: forall (s0 :: DdK) (s1 :: DdK). AddMod PgDefault s0 s1 => Sql -> Dd s0 -> Dd s1 pgDefault Sql v = forall p (s0 :: DdK) (s1 :: DdK). AddMod p s0 s1 => p -> Dd s0 -> Dd s1 addMod (Sql -> PgDefault PgDefault Sql v)