Copyright | 2013-2017 Kei Hibino |
---|---|
License | BSD3 |
Maintainer | ex8k.hibino@gmail.com |
Stability | experimental |
Portability | unknown |
Safe Haskell | None |
Language | Haskell2010 |
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 ::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
Monad (RecordFromSql q) Source # | |
Functor (RecordFromSql q) Source # | |
Applicative (RecordFromSql q) Source # | Derived |
:: 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
].
:: 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
.
:: ([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
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.
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.