@@ -60,6 +60,7 @@ module Squeal.PostgreSQL.Schema
6060 , renderAlias
6161 , renderAliases
6262 , Aliased (As)
63+ , Aliasable (as)
6364 , renderAliasedAs
6465 , AliasesOf
6566 , ZipAliased (..)
@@ -401,6 +402,14 @@ instance (alias0 ~ alias1, alias0 ~ alias2, KnownSymbol alias2)
401402 => IsLabel alias0 (Aliased Alias (alias1 ::: alias2)) where
402403 fromLabel = fromLabel @alias2 `As` fromLabel @alias1
403404
405+class KnownSymbol alias => Aliasable expression alias aliased where
406+ as :: expression -> Alias alias -> aliased
407+instance KnownSymbol alias => Aliasable
408+ (expression ty) alias (Aliased expression (alias ::: ty)) where as = As
409+instance KnownSymbol alias => Aliasable
410+ (expression ty) alias (NP (Aliased expression) '[alias ::: ty])
411+ where
412+ expression `as` alias = expression `As` alias :* Nil
404413-- | >>> let renderMaybe = fromString . maybe "Nothing" (const "Just")
405414-- >>> renderAliasedAs renderMaybe (Just (3::Int) `As` #an_int)
406415-- "Just AS \"an_int\""