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

Portabilityunknown
Stabilityexperimental
Maintainerex8k.hibino@gmail.com
Safe HaskellSafe-Inferred

Database.Record.FromSql

Contents

Description

This module defines interfaces from list of SQL type into Haskell type.

Synopsis

Conversion from list of SQL type into record type

Structure of RecordFromSql q a is similar to parser. While running RecordFromSql behavior is the same as parser which parse list of SQL type [q] stream.

So, RecordFromSql q is Monad and Applicative instance like parser monad. When, you have data constructor and objects like below.

  data MyRecord = MyRecord Foo Bar Baz
  foo :: RecordFromSql SqlValue Foo
  foo =  ...
  bar :: RecordFromSql SqlValue Bar
  bar =  ...
  baz :: RecordFromSql SqlValue Bar
  baz =  ...

You can get composed RecordFromSql like below.

  myRecord :: RecordFromSql SqlValue MyRecord
  myRecord =  MyRecord <$> foo <*> bar <*> baz

data RecordFromSql q a Source

Proof object type to convert from sql value type q list into Haskell type a.

Instances

Monad (RecordFromSql q)

Monad instance like parser Monad.

Functor (RecordFromSql q)

Derived Functor instance from Monad instance

Applicative (RecordFromSql q)

Derived Applicative instance from Monad instance

runTakeRecordSource

Arguments

:: RecordFromSql q a

Proof object which has capability to convert

-> [q]

list of SQL type

-> (a, [q])

Haskell type and rest of list

Run RecordFromSql proof object. Convert from list of SQL type [q] into Haskell type a and rest of list [q].

runToRecordSource

Arguments

:: RecordFromSql q a

Proof object which has capability to convert

-> [q]

list of SQL type

-> a

Haskell type

Run RecordFromSql proof object. Convert from list of SQL type [q] into Haskell type a.

createRecordFromSqlSource

Arguments

:: ([q] -> (a, [q]))

Convert function body

-> RecordFromSql q a

Result proof object

Axiom of RecordFromSql for SQL type q and Haskell type a

(<&>) :: RecordFromSql q a -> RecordFromSql q b -> RecordFromSql q (a, b)Source

Derivation rule of RecordFromSql proof object for Haskell tuple (,) type.

maybeRecord :: PersistableType q => RecordFromSql q a -> ColumnConstraint NotNull a -> RecordFromSql q (Maybe a)Source

Derivation rule of RecordFromSql proof object for Haskell Maybe type.

Inference rules of RecordFromSql conversion

class FromSql q a whereSource

Inference rule interface for RecordFromSql proof object.

Methods

recordFromSql :: RecordFromSql q aSource

RecordFromSql proof object.

Instances

FromSql q ()

Inference rule of RecordFromSql proof object which can convert from empty list of SQL type [q] into Haskell unit () type.

(HasColumnConstraint NotNull a, FromSql q a, PersistableType q) => FromSql q (Maybe a)

Inference rule of RecordFromSql proof object which can convert from list of SQL type [q] into Haskell Maybe type.

(FromSql q a, FromSql q b) => FromSql q (a, b)

Inference rule of RecordFromSql proof object which can convert from list of SQL type [q] into Haskell tuple (a, b) type.

takeRecord :: FromSql q a => [q] -> (a, [q])Source

Run inferred RecordFromSql proof object. Convert from list of SQL type [q] into haskell type a and rest of list [q].

toRecord :: FromSql q a => [q] -> aSource

Run inferred RecordFromSql proof object. Convert from list of SQL type [q] into haskell type a.

valueFromSql :: PersistableValue q a => RecordFromSql q aSource

Derived RecordFromSql from persistable value.