| Copyright | 2013-2017 Kei Hibino |
|---|---|
| License | BSD3 |
| Maintainer | ex8k.hibino@gmail.com |
| Stability | experimental |
| Portability | unknown |
| Safe Haskell | Safe-Inferred |
| Language | Haskell2010 |
Database.Record.FromSql
Description
This module defines interfaces from list of database value type into Haskell type.
Synopsis
- 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
- recordFromSql :: RecordFromSql q a
- 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 Baz baz = ...
You can get composed RecordFromSql like below.
myRecord :: RecordFromSql SqlValue MyRecord myRecord = MyRecord <$> foo <*> bar <*> baz
Instances
| Applicative (RecordFromSql q) Source # | Derived |
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 # | |
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 # | |
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 # | |
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
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
| FromSql q () Source # | Implicit derivation rule of |
Defined in Database.Record.FromSql Methods recordFromSql :: RecordFromSql q () Source # | |
| (HasColumnConstraint NotNull a, FromSql q a, PersistableType q) => FromSql q (Maybe a) Source # | Implicit derivation rule of |
Defined in Database.Record.FromSql Methods recordFromSql :: RecordFromSql q (Maybe a) Source # | |
| (FromSql q a, FromSql q b) => FromSql q (a, b) Source # | |
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 # | |
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 # | |
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 # | |
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 # | |
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 # | |
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.