Something went wrong. Try again.
Compile-time SQL datatype generation from PostgreSQL for Haskell
Something went wrong. Try again.
2.8 kB · 68 lines
Haskell
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869module Hasql.Generate.Column ( PgColumn ) where
----------------------------------------------------------------------------------------------------
import qualified Data.Aeson as Aesonimport Data.Bool ( Bool )import Data.ByteString ( ByteString )import Data.Char ( Char )import Data.Int ( Int16, Int32, Int64 )import Data.Scientific ( Scientific )import Data.Text ( Text )import Data.Time ( Day , DiffTime , LocalTime , TimeOfDay , TimeZone , UTCTime )import Data.UUID ( UUID )
import GHC.TypeLits ( Symbol )
import Hasql.Generate.Codec ( PgCodec )
import Prelude ( Double, Float )
----------------------------------------------------------------------------------------------------
{- Typeclass mapping a schema-qualified PostgreSQL type name to a Haskell type. The functional dependency @pgSchema pgName -> a@ ensures each (schema, type name) pair resolves to exactly one Haskell type.
Built-in types use @\"pg_catalog\"@ as their schema. User-defined types (e.g. enums created with @fromType@) use their actual schema name.
The TH code generator uses @reifyInstances@ on this class to discover the correct Haskell type for each column at compile time. Users can define additional instances for custom PostgreSQL types (e.g. enums).-}class (PgCodec a) => PgColumn (pgSchema :: Symbol) (pgName :: Symbol) a | pgSchema pgName -> a
----------------------------------------------------------------------------------------------------
instance PgColumn "pg_catalog" "bool" Boolinstance PgColumn "pg_catalog" "int2" Int16instance PgColumn "pg_catalog" "int4" Int32instance PgColumn "pg_catalog" "int8" Int64instance PgColumn "pg_catalog" "float4" Floatinstance PgColumn "pg_catalog" "float8" Doubleinstance PgColumn "pg_catalog" "numeric" Scientificinstance PgColumn "pg_catalog" "char" Charinstance PgColumn "pg_catalog" "text" Textinstance PgColumn "pg_catalog" "varchar" Textinstance PgColumn "pg_catalog" "bpchar" Textinstance PgColumn "pg_catalog" "name" Textinstance PgColumn "pg_catalog" "bytea" ByteStringinstance PgColumn "pg_catalog" "date" Dayinstance PgColumn "pg_catalog" "timestamp" LocalTimeinstance PgColumn "pg_catalog" "timestamptz" UTCTimeinstance PgColumn "pg_catalog" "time" TimeOfDayinstance PgColumn "pg_catalog" "timetz" (TimeOfDay, TimeZone)instance PgColumn "pg_catalog" "interval" DiffTimeinstance PgColumn "pg_catalog" "uuid" UUIDinstance PgColumn "pg_catalog" "json" Aeson.Valueinstance PgColumn "pg_catalog" "jsonb" Aeson.Value