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

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

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

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.

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

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.