persistable-record-0.2.0.0: Binding between SQL database values and haskell records.

Copyright2013 Kei Hibino
LicenseBSD3
Maintainerex8k.hibino@gmail.com
Stabilityexperimental
Portabilityunknown
Safe HaskellSafe
LanguageHaskell2010

Database.Record.Persistable

Contents

Description

This module defines interfaces between Haskell type and list of SQL type.

Synopsis

Specify SQL type

data PersistableSqlType q Source

Proof object to specify type q is SQL type

runPersistableNullValue :: PersistableSqlType q -> q Source

Null value of SQL type q.

unsafePersistableSqlTypeFromNull Source

Arguments

:: q

SQL null value of SQL type q

-> PersistableSqlType q

Result proof object

Unsafely generate PersistableSqlType proof object from specified SQL null value which type is q.

Specify record width

data PersistableRecordWidth a Source

Proof object to specify width of Haskell type a when converting to SQL type list.

runPersistableRecordWidth :: PersistableRecordWidth a -> Int Source

Get width Int value of record type a.

unsafePersistableRecordWidth Source

Arguments

:: Int

Specify width of Haskell type a

-> PersistableRecordWidth a

Result proof object

Unsafely generate PersistableRecordWidth proof object from specified width of Haskell type a.

unsafeValueWidth :: PersistableRecordWidth a Source

Unsafely generate PersistableRecordWidth proof object for Haskell type a which is single column type.

maybeWidth :: PersistableRecordWidth a -> PersistableRecordWidth (Maybe a) Source

Derivation rule of PersistableRecordWidth from from Haskell type a into for Haskell type Maybe a.

Bidirectional conversion between single column type and SQL type

data PersistableSqlValue q a Source

Proof object to specify value type a is convertible with SQL type q

persistableSqlValue :: PersistableSqlType q -> (q -> a) -> (a -> q) -> PersistableSqlValue q a Source

Axiom of PersistableSqlValue for SQL type q and Haskell type a.

toValue Source

Arguments

:: PersistableSqlValue q a

Proof object which has capability to convert

-> q

SQL type

-> a

Haskell type

Run PersistableSqlValue proof object. Convert from SQL type q into Haskell type a.

fromValue Source

Arguments

:: PersistableSqlValue q a

Proof object which has capability to convert

-> a

Haskell type

-> q

SQL type

Run PersistableSqlValue proof object. Convert from Haskell type a into SQL type q.

Inference rules for proof objects

class Eq q => PersistableType q where Source

Interface of inference rule for PersistableSqlType proof object

sqlNullValue :: PersistableType q => q Source

Inferred Null value of SQL type.

class PersistableType q => PersistableValue q a where Source

Interface of inference rule for PersistableSqlValue proof object

fromSql :: PersistableValue q a => q -> a Source

Run inferred PersistableSqlValue proof object. Convert from SQL type q into Haskell type a.

toSql :: PersistableValue q a => a -> q Source

Run inferred PersistableSqlValue proof object. Convert from Haskell type a into SQL type q.

class PersistableWidth a where Source

Interface of inference rule for PersistableRecordWidth proof object

Instances

PersistableWidth () Source

Inference rule of PersistableRecordWidth for Haskell unit () type. Derive from axiom.

PersistableWidth a => PersistableWidth (Maybe a) Source

Inference rule of PersistableRecordWidth proof object for Maybe type.

(PersistableWidth a, PersistableWidth b) => PersistableWidth (a, b) Source

Inference rule of PersistableRecordWidth proof object for tuple (a, b) type.

derivedWidth :: PersistableWidth a => (PersistableRecordWidth a, Int) Source

Pass type parameter and inferred width value.