persistable-record-0.4.1.1: 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.

Methods

(>>=) :: RecordFromSql q a -> (a -> RecordFromSql q b) -> RecordFromSql q b #

(>>) :: RecordFromSql q a -> RecordFromSql q b -> RecordFromSql q b #

return :: a -> RecordFromSql q a #

fail :: String -> RecordFromSql q a #

Functor (RecordFromSql q) Source #

Derived Functor instance from Monad instance

Methods

fmap :: (a -> b) -> RecordFromSql q a -> RecordFromSql q b #

(<$) :: a -> RecordFromSql q b -> RecordFromSql q a #

Applicative (RecordFromSql q) Source #

Derived Applicative instance from Monad instance

Methods

pure :: a -> RecordFromSql q a #

(<*>) :: RecordFromSql q (a -> b) -> RecordFromSql q a -> RecordFromSql q b #

(*>) :: RecordFromSql q a -> RecordFromSql q b -> RecordFromSql q b #

(<*) :: RecordFromSql q a -> RecordFromSql q b -> RecordFromSql q a #

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.

Minimal complete definition

recordFromSql

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.

Methods

recordFromSql :: RecordFromSql q (a, b) Source #

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.

valueRecordFromSql :: (q -> a) -> RecordFromSql q a Source #

Derivation rule of RecordFromSql proof object for value convert function.