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.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) Source

Monad instance like parser Monad.

Functor (RecordFromSql q) Source

Derived Functor instance from Monad instance

Applicative (RecordFromSql q) Source

Derived Applicative instance from Monad instance

runTakeRecord Source

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].

runToRecord Source

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.

createRecordFromSql Source

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) infixl 4 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 where Source

Inference rule interface for RecordFromSql proof object.

Methods

recordFromSql :: RecordFromSql q a Source

RecordFromSql proof object.

Instances

FromSql q () Source

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) Source

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) Source

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] -> a Source

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

valueFromSql :: PersistableValue q a => RecordFromSql q a Source

Derived RecordFromSql from persistable value.