@hackage postgresql-types-algebra0.0.1
Type classes for PostgreSQL type mappings
Categories
License
MIT
Maintainer
Nikita Volkov <nikita.y.volkov@mail.ru>
Links
Versions
Installation
Dependencies (8)
- attoparsec >=0.14 && <0.19
- base >=4.11 && <5
- bytestring >=0.10 && <0.13
- ptr-peeker ^>=0.1
- ptr-poker ^>=0.1.2.16
- tagged ^>=0.8.9 Show all…
Dependents (3)
@hackage/postgresql-simple-postgresql-types, @hackage/postgresql-types, @hackage/hasql-postgresql-types
postgresql-types-algebra
Core type classes and algebra for PostgreSQL type mappings, extracted from "postgresql-types".
Overview
This package provides the fundamental abstractions for mapping Haskell types to PostgreSQL types:
- Type classes defining the algebra for PostgreSQL type mappings
- Error types for decoding failures
- Metadata support for type names, OIDs, and parameters
- No concrete implementations - just the algebra
Type Classes
IsScalar
The core type class for types that map to PostgreSQL values:
class IsScalar a where
-- Type metadata
typeName :: Tagged a Text
baseOid :: Tagged a (Maybe Word32)
arrayOid :: Tagged a (Maybe Word32)
typeParams :: Tagged a [Text]
typeSignature :: Tagged a Text
-- Binary format
binaryEncoder :: a -> Write.Write
binaryDecoder :: PtrPeeker.Variable (Either DecodingError a)
-- Textual format
textualEncoder :: a -> TextBuilder.TextBuilder
textualDecoder :: Attoparsec.Parser a
This class enables:
- Binary encoding/decoding using PostgreSQL's native binary format
- Textual encoding/decoding using PostgreSQL's text representation
- Type metadata including OIDs and type signatures for parameterized types
- Round-trip fidelity through all encoding combinations
Use Cases
For Library Authors
Use this package to:
- Define custom PostgreSQL type mappings compatible with the "postgresql-types" ecosystem
- Create adapter libraries for different PostgreSQL client libraries
- Build generic tools that work with any
IsScalarinstance
For Application Developers
This package is typically used indirectly through:
- "postgresql-types" - Concrete type implementations
- "hasql-postgresql-types" - "hasql" integration
- "postgresql-simple-postgresql-types" - "postgresql-simple" integration