| Copyright | 2013-2017 Kei Hibino |
|---|---|
| License | BSD3 |
| Maintainer | ex8k.hibino@gmail.com |
| Stability | experimental |
| Portability | unknown |
| Safe Haskell | None |
| Language | Haskell2010 |
Database.Record.FromSql
Contents
Description
This module defines interfaces from list of database value type into Haskell type.
- data RecordFromSql q a
- runTakeRecord :: RecordFromSql q a -> [q] -> (a, [q])
- runToRecord :: RecordFromSql q a -> [q] -> a
- createRecordFromSql :: ([q] -> (a, [q])) -> RecordFromSql q a
- (<&>) :: RecordFromSql q a -> RecordFromSql q b -> RecordFromSql q (a, b)
- maybeRecord :: PersistableType q => RecordFromSql q a -> ColumnConstraint NotNull a -> RecordFromSql q (Maybe a)
- class FromSql q a where
- takeRecord :: FromSql q a => [q] -> (a, [q])
- toRecord :: FromSql q a => [q] -> a
- valueRecordFromSql :: (q -> a) -> RecordFromSql q a
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 ::RecordFromSqlSqlValue Foo foo = ... bar ::RecordFromSqlSqlValue Bar bar = ... baz ::RecordFromSqlSqlValue Bar baz = ...
You can get composed RecordFromSql like below.
myRecord :: RecordFromSql SqlValue MyRecord myRecord = MyRecord <$> foo <*> bar <*> baz
Instances
| Monad (RecordFromSql q) Source # | |
| Functor (RecordFromSql q) Source # | |
| Applicative (RecordFromSql q) Source # | Derived |
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].
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.
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 |
| (HasColumnConstraint NotNull a, FromSql q a, PersistableType q) => FromSql q (Maybe a) Source # | Implicit derivation rule of |
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.