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

Copyright2013-2017 Kei Hibino
LicenseBSD3
Maintainerex8k.hibino@gmail.com
Stabilityexperimental
Portabilityunknown
Safe HaskellNone
LanguageHaskell2010

Database.Record.FromSql

Contents

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
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 #

fail :: String -> 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 #

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 #

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.

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

RecordFromSql q a record parser function.

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