persistable-record-0.6.0.6: Binding between SQL database values and haskell records.
Copyright2013-2017 Kei Hibino
LicenseBSD3
Maintainerex8k.hibino@gmail.com
Stabilityexperimental
Portabilityunknown
Safe HaskellSafe-Inferred
LanguageHaskell2010

Database.Record.FromSql

Description

This module defines interfaces from list of database value type into Haskell type.

Synopsis

Conversion from list of database value type into record type

data RecordFromSql q a Source #

RecordFromSql q a is data-type wrapping function to convert from list of database value type (to receive from database) [q] into Haskell type a

This structure is similar to parser. While running RecordFromSql behavior is the same as non-fail-able parser which parse list of database value 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 Baz
  baz =  ...

You can get composed RecordFromSql like below.

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

Instances

Instances details
Applicative (RecordFromSql q) Source #

Derived Applicative instance from Monad instance

Instance details

Defined in Database.Record.FromSql

Methods

pure :: a -> RecordFromSql q a #

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

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

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

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

Functor (RecordFromSql q) Source #

Derived Functor instance from Monad instance

Instance details

Defined in Database.Record.FromSql

Methods

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

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

Monad (RecordFromSql q) Source #

Monad instance like parser Monad.

Instance details

Defined in Database.Record.FromSql

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 #

runTakeRecord Source #

Arguments

:: RecordFromSql q a

parser function object which has capability to convert

-> [q]

list of database value type

-> (a, [q])

Haskell type and rest of list

Run RecordFromSql parser function object. Convert from list of database value type [q] into Haskell type a and rest of list [q].

runToRecord Source #

Arguments

:: RecordFromSql q a

parser function object which has capability to convert

-> [q]

list of database value type

-> a

Haskell type

Run RecordFromSql parser function object. Convert from list of database value type [q] into Haskell type a.

createRecordFromSql Source #

Arguments

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

Convert function body

-> RecordFromSql q a

Result parser function object

Axiom of RecordFromSql for database value type q and Haskell type a

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

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

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

Derivation rule of RecordFromSql parser function object for Haskell Maybe type.

Derivation rules of RecordFromSql conversion

class FromSql q a where Source #

FromSql q a is implicit rule to derive RecordFromSql q a record parser function against type a.

Generic programming (https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#generic-programming) with default signature is available for FromSql class, so you can make instance like below:

  {-# LANGUAGE DeriveGeneric #-}
  import GHC.Generics (Generic)
  import Database.HDBC (SqlValue)
  --
  data Foo = Foo { ... } deriving Generic
  instance FromSql SqlValue Foo

Minimal complete definition

Nothing

Methods

recordFromSql :: RecordFromSql q a Source #

RecordFromSql q a record parser function.

default recordFromSql :: (Generic a, GFromSql q (Rep a)) => RecordFromSql q a Source #

Instances

Instances details
FromSql q () Source #

Implicit derivation rule of RecordFromSql parser function object which can convert from empty list of database value type [q] into Haskell unit () type.

Instance details

Defined in Database.Record.FromSql

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

Implicit derivation rule of RecordFromSql parser function object which can convert from list of database value type [q] into Haskell Maybe type.

Instance details

Defined in Database.Record.FromSql

(FromSql q a, FromSql q b) => FromSql q (a, b) Source # 
Instance details

Defined in Database.Record.TupleInstances

Methods

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

(FromSql q a, FromSql q b, FromSql q c) => FromSql q (a, b, c) Source # 
Instance details

Defined in Database.Record.TupleInstances

Methods

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

(FromSql q a, FromSql q b, FromSql q c, FromSql q d) => FromSql q (a, b, c, d) Source # 
Instance details

Defined in Database.Record.TupleInstances

Methods

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

(FromSql q a, FromSql q b, FromSql q c, FromSql q d, FromSql q e) => FromSql q (a, b, c, d, e) Source # 
Instance details

Defined in Database.Record.TupleInstances

Methods

recordFromSql :: RecordFromSql q (a, b, c, d, e) Source #

(FromSql q a, FromSql q b, FromSql q c, FromSql q d, FromSql q e, FromSql q f) => FromSql q (a, b, c, d, e, f) Source # 
Instance details

Defined in Database.Record.TupleInstances

Methods

recordFromSql :: RecordFromSql q (a, b, c, d, e, f) Source #

(FromSql q a, FromSql q b, FromSql q c, FromSql q d, FromSql q e, FromSql q f, FromSql q g) => FromSql q (a, b, c, d, e, f, g) Source # 
Instance details

Defined in Database.Record.TupleInstances

Methods

recordFromSql :: RecordFromSql q (a, b, c, d, e, f, g) Source #

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

Run implicit RecordFromSql parser function object. Convert from list of database value type [q] into haskell type a and rest of list [q].

toRecord :: FromSql q a => [q] -> a Source #

Run implicit RecordFromSql parser function object. Convert from list of database value type [q] into haskell type a.

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

Derivation rule of RecordFromSql parser function object for value convert function.