DSH-0.7.8.2: Database Supported Haskell

Safe HaskellNone

Database.DSH

Contents

Description

This module is intended to be imported qualified, to avoid name clashes with Prelude functions. For example:

 import qualified Database.DSH as Q
 import Database.DSH (Q)

Alternatively you can hide Prelude and import this module like this:

 import Prelude ()
 import Database.DSH

In this case you still get Prelude definitions that are not provided by Database.DSH.

Synopsis

Unit

Boolean logic

Equality and Ordering

eq :: (Eq a, QA a) => Q a -> Q a -> Q BoolSource

(==) :: (Eq a, QA a) => Q a -> Q a -> Q BoolSource

neq :: (Eq a, QA a) => Q a -> Q a -> Q BoolSource

(/=) :: (Eq a, QA a) => Q a -> Q a -> Q BoolSource

lt :: (Ord a, QA a) => Q a -> Q a -> Q BoolSource

(<) :: (Ord a, QA a) => Q a -> Q a -> Q BoolSource

lte :: (Ord a, QA a) => Q a -> Q a -> Q BoolSource

(<=) :: (Ord a, QA a) => Q a -> Q a -> Q BoolSource

gte :: (Ord a, QA a) => Q a -> Q a -> Q BoolSource

(>=) :: (Ord a, QA a) => Q a -> Q a -> Q BoolSource

gt :: (Ord a, QA a) => Q a -> Q a -> Q BoolSource

(>) :: (Ord a, QA a) => Q a -> Q a -> Q BoolSource

min :: forall a. (Ord a, QA a) => Q a -> Q a -> Q aSource

max :: forall a. (Ord a, QA a) => Q a -> Q a -> Q aSource

Conditionals

bool :: QA a => Q a -> Q a -> Q Bool -> Q aSource

Boolean fold | It's first argument is used in the case of False | It's second argument is used in the case of True | The third argument is the boolean

cond :: forall a. QA a => Q Bool -> Q a -> Q a -> Q aSource

(?) :: QA a => Q Bool -> (Q a, Q a) -> Q aSource

Maybe

listToMaybe :: QA a => Q [a] -> Q (Maybe a)Source

maybeToList :: QA a => Q (Maybe a) -> Q [a]Source

nothing :: QA a => Q (Maybe a)Source

just :: QA a => Q a -> Q (Maybe a)Source

isNothing :: QA a => Q (Maybe a) -> Q BoolSource

isJust :: QA a => Q (Maybe a) -> Q BoolSource

fromJust :: QA a => Q (Maybe a) -> Q aSource

maybe :: (QA a, QA b) => Q b -> (Q a -> Q b) -> Q (Maybe a) -> Q bSource

fromMaybe :: QA a => Q a -> Q (Maybe a) -> Q aSource

catMaybes :: QA a => Q [Maybe a] -> Q [a]Source

mapMaybe :: (QA a, QA b) => (Q a -> Q (Maybe b)) -> Q [a] -> Q [b]Source

Either

left :: (QA a, QA b) => Q a -> Q (Either a b)Source

right :: (QA a, QA b) => Q b -> Q (Either a b)Source

isLeft :: (QA a, QA b) => Q (Either a b) -> Q BoolSource

isRight :: (QA a, QA b) => Q (Either a b) -> Q BoolSource

either :: (QA a, QA b, QA c) => (Q a -> Q c) -> (Q b -> Q c) -> Q (Either a b) -> Q cSource

lefts :: (QA a, QA b) => Q [Either a b] -> Q [a]Source

rights :: (QA a, QA b) => Q [Either a b] -> Q [b]Source

partitionEithers :: (QA a, QA b) => Q [Either a b] -> Q ([a], [b])Source

List Construction

nil :: forall a. QA a => Q [a]Source

empty :: QA a => Q [a]Source

cons :: forall a. QA a => Q a -> Q [a] -> Q [a]Source

(<|) :: QA a => Q a -> Q [a] -> Q [a]Source

snoc :: forall a. QA a => Q [a] -> Q a -> Q [a]Source

(|>) :: QA a => Q [a] -> Q a -> Q [a]Source

singleton :: QA a => Q a -> Q [a]Source

List Operations

head :: forall a. QA a => Q [a] -> Q aSource

tail :: forall a. QA a => Q [a] -> Q [a]Source

take :: forall a. QA a => Q Integer -> Q [a] -> Q [a]Source

drop :: forall a. QA a => Q Integer -> Q [a] -> Q [a]Source

map :: forall a b. (QA a, QA b) => (Q a -> Q b) -> Q [a] -> Q [b]Source

append :: forall a. QA a => Q [a] -> Q [a] -> Q [a]Source

(><) :: QA a => Q [a] -> Q [a] -> Q [a]Source

filter :: forall a. QA a => (Q a -> Q Bool) -> Q [a] -> Q [a]Source

groupWith :: forall a b. (Ord b, QA a, QA b) => (Q a -> Q b) -> Q [a] -> Q [[a]]Source

sortWith :: forall a b. (Ord b, QA a, QA b) => (Q a -> Q b) -> Q [a] -> Q [a]Source

the :: forall a. (Eq a, QA a) => Q [a] -> Q aSource

last :: forall a. QA a => Q [a] -> Q aSource

init :: forall a. QA a => Q [a] -> Q [a]Source

null :: QA a => Q [a] -> Q BoolSource

length :: QA a => Q [a] -> Q IntegerSource

index :: forall a. QA a => Q [a] -> Q Integer -> Q aSource

(!!) :: QA a => Q [a] -> Q Integer -> Q aSource

reverse :: forall a. QA a => Q [a] -> Q [a]Source

Special folds

or :: Q [Bool] -> Q BoolSource

any :: QA a => (Q a -> Q Bool) -> Q [a] -> Q BoolSource

all :: QA a => (Q a -> Q Bool) -> Q [a] -> Q BoolSource

sum :: forall a. (QA a, Num a) => Q [a] -> Q aSource

concat :: forall a. QA a => Q [[a]] -> Q [a]Source

concatMap :: (QA a, QA b) => (Q a -> Q [b]) -> Q [a] -> Q [b]Source

maximum :: forall a. (QA a, Ord a) => Q [a] -> Q aSource

minimum :: forall a. (QA a, Ord a) => Q [a] -> Q aSource

Sublists

splitAt :: forall a. QA a => Q Integer -> Q [a] -> Q ([a], [a])Source

takeWhile :: forall a. QA a => (Q a -> Q Bool) -> Q [a] -> Q [a]Source

dropWhile :: forall a. QA a => (Q a -> Q Bool) -> Q [a] -> Q [a]Source

span :: forall a. QA a => (Q a -> Q Bool) -> Q [a] -> Q ([a], [a])Source

break :: forall a. QA a => (Q a -> Q Bool) -> Q [a] -> Q ([a], [a])Source

Searching Lists

elem :: forall a. (Eq a, QA a) => Q a -> Q [a] -> Q BoolSource

notElem :: forall a. (Eq a, QA a) => Q a -> Q [a] -> Q BoolSource

lookup :: (QA a, QA b, Eq a) => Q a -> Q [(a, b)] -> Q (Maybe b)Source

Zipping and Unzipping Lists

zip :: forall a b. (QA a, QA b) => Q [a] -> Q [b] -> Q [(a, b)]Source

zipWith :: forall a b c. (QA a, QA b, QA c) => (Q a -> Q b -> Q c) -> Q [a] -> Q [b] -> Q [c]Source

unzip :: forall a b. (QA a, QA b) => Q [(a, b)] -> Q ([a], [b])Source

Set operations

nub :: forall a. (Eq a, QA a) => Q [a] -> Q [a]Source

Tuple Projection Functions

fst :: forall a b. (QA a, QA b) => Q (a, b) -> Q aSource

snd :: forall a b. (QA a, QA b) => Q (a, b) -> Q bSource

Conversions between numeric types

Convert Haskell values into DB queries

toQ :: forall a. QA a => a -> Q aSource

Rebind Monadic Combinators

return :: QA a => Q a -> Q [a]Source

(>>=) :: (QA a, QA b) => Q [a] -> (Q a -> Q [b]) -> Q [b]Source

(>>) :: (QA a, QA b) => Q [a] -> Q [b] -> Q [b]Source

mzip :: (QA a, QA b) => Q [a] -> Q [b] -> Q [(a, b)]Source

guard :: Q Bool -> Q [()]Source

Missing Combinators

 

This module offers most of the functions on lists given in PreludeList for the Q type. Missing functions are:

General folds:

 foldl
 foldl1
 scanl
 scanl1
 foldr
 foldr1
 scanr
 scanr1

Infinit lists:

 iterate
 repeat
 cycle

String functions:

 lines
 words
 unlines
 unwords

Zipping and unzipping lists:

 zip3
 zipWith3
 unzip3

Data Types

data Q a Source

Instances

Typeable1 Q 
Eq (Q Double) 
Eq (Q Integer) 
Fractional (Q Double) 
(Typeable (Q a), Data a) => Data (Q a) 
Num (Q Double) 
Num (Q Integer) 
Show (Q a) 
IsString (Q Text) 
View (Q Bool) (Q Bool) 
View (Q Char) (Q Char) 
View (Q Double) (Q Double) 
View (Q Integer) (Q Integer) 
View (Q ()) (Q ()) 
View (Q Text) (Q Text) 
(QA a, QA b) => View (Q (a, b)) (Q a, Q b) 
(QA a1, QA a2, QA a3) => View (Q (a1, a2, a3)) (Q a1, Q a2, Q a3) 
(QA a1, QA a2, QA a3, QA a4) => View (Q (a1, a2, a3, a4)) (Q a1, Q a2, Q a3, Q a4) 
(QA a1, QA a2, QA a3, QA a4, QA a5) => View (Q (a1, a2, a3, a4, a5)) (Q a1, Q a2, Q a3, Q a4, Q a5) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6) => View (Q (a1, a2, a3, a4, a5, a6)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7) => View (Q (a1, a2, a3, a4, a5, a6, a7)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9, Q a10) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9, Q a10, Q a11) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9, Q a10, Q a11, Q a12) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9, Q a10, Q a11, Q a12, Q a13) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9, Q a10, Q a11, Q a12, Q a13, Q a14) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9, Q a10, Q a11, Q a12, Q a13, Q a14, Q a15) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9, Q a10, Q a11, Q a12, Q a13, Q a14, Q a15, Q a16) 

Type Classes

class QA a Source

Instances

QA Bool 
QA Char 
QA Double 
QA Integer 
QA () 
QA Text 
QA a => QA [a] 
QA a => QA (Maybe a) 
(QA a, QA b) => QA (Either a b) 
(QA a, QA b) => QA (a, b) 
(QA a1, QA a2, QA a3) => QA (a1, a2, a3) 
(QA a1, QA a2, QA a3, QA a4) => QA (a1, a2, a3, a4) 
(QA a1, QA a2, QA a3, QA a4, QA a5) => QA (a1, a2, a3, a4, a5) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6) => QA (a1, a2, a3, a4, a5, a6) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7) => QA (a1, a2, a3, a4, a5, a6, a7) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8) => QA (a1, a2, a3, a4, a5, a6, a7, a8) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45, QA a46) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45, QA a46, QA a47) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45, QA a46, QA a47, QA a48) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45, QA a46, QA a47, QA a48, QA a49) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45, QA a46, QA a47, QA a48, QA a49, QA a50) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45, QA a46, QA a47, QA a48, QA a49, QA a50, QA a51) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45, QA a46, QA a47, QA a48, QA a49, QA a50, QA a51, QA a52) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45, QA a46, QA a47, QA a48, QA a49, QA a50, QA a51, QA a52, QA a53) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45, QA a46, QA a47, QA a48, QA a49, QA a50, QA a51, QA a52, QA a53, QA a54) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45, QA a46, QA a47, QA a48, QA a49, QA a50, QA a51, QA a52, QA a53, QA a54, QA a55) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45, QA a46, QA a47, QA a48, QA a49, QA a50, QA a51, QA a52, QA a53, QA a54, QA a55, QA a56) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45, QA a46, QA a47, QA a48, QA a49, QA a50, QA a51, QA a52, QA a53, QA a54, QA a55, QA a56, QA a57) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45, QA a46, QA a47, QA a48, QA a49, QA a50, QA a51, QA a52, QA a53, QA a54, QA a55, QA a56, QA a57, QA a58) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45, QA a46, QA a47, QA a48, QA a49, QA a50, QA a51, QA a52, QA a53, QA a54, QA a55, QA a56, QA a57, QA a58, QA a59) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16, QA a17, QA a18, QA a19, QA a20, QA a21, QA a22, QA a23, QA a24, QA a25, QA a26, QA a27, QA a28, QA a29, QA a30, QA a31, QA a32, QA a33, QA a34, QA a35, QA a36, QA a37, QA a38, QA a39, QA a40, QA a41, QA a42, QA a43, QA a44, QA a45, QA a46, QA a47, QA a48, QA a49, QA a50, QA a51, QA a52, QA a53, QA a54, QA a55, QA a56, QA a57, QA a58, QA a59, QA a60) => QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, a26, a27, a28, a29, a30, a31, a32, a33, a34, a35, a36, a37, a38, a39, a40, a41, a42, a43, a44, a45, a46, a47, a48, a49, a50, a51, a52, a53, a54, a55, a56, a57, a58, a59, a60) 

class QA a => TA a Source

Instances

TA Bool 
TA Char 
TA Double 
TA Integer 
TA () 
TA Text 
(QA (a, b), BasicType a, BasicType b, QA a, QA b) => TA (a, b) 
(QA (a1, a2, a3), QA a1, BasicType a1, QA a2, BasicType a2, QA a3, BasicType a3) => TA (a1, a2, a3) 
(QA (a1, a2, a3, a4), QA a1, BasicType a1, QA a2, BasicType a2, QA a3, BasicType a3, QA a4, BasicType a4) => TA (a1, a2, a3, a4) 
(QA (a1, a2, a3, a4, a5), QA a1, BasicType a1, QA a2, BasicType a2, QA a3, BasicType a3, QA a4, BasicType a4, QA a5, BasicType a5) => TA (a1, a2, a3, a4, a5) 
(QA (a1, a2, a3, a4, a5, a6), QA a1, BasicType a1, QA a2, BasicType a2, QA a3, BasicType a3, QA a4, BasicType a4, QA a5, BasicType a5, QA a6, BasicType a6) => TA (a1, a2, a3, a4, a5, a6) 
(QA (a1, a2, a3, a4, a5, a6, a7), QA a1, BasicType a1, QA a2, BasicType a2, QA a3, BasicType a3, QA a4, BasicType a4, QA a5, BasicType a5, QA a6, BasicType a6, QA a7, BasicType a7) => TA (a1, a2, a3, a4, a5, a6, a7) 
(QA (a1, a2, a3, a4, a5, a6, a7, a8), QA a1, BasicType a1, QA a2, BasicType a2, QA a3, BasicType a3, QA a4, BasicType a4, QA a5, BasicType a5, QA a6, BasicType a6, QA a7, BasicType a7, QA a8, BasicType a8) => TA (a1, a2, a3, a4, a5, a6, a7, a8) 
(QA (a1, a2, a3, a4, a5, a6, a7, a8, a9), QA a1, BasicType a1, QA a2, BasicType a2, QA a3, BasicType a3, QA a4, BasicType a4, QA a5, BasicType a5, QA a6, BasicType a6, QA a7, BasicType a7, QA a8, BasicType a8, QA a9, BasicType a9) => TA (a1, a2, a3, a4, a5, a6, a7, a8, a9) 
(QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10), QA a1, BasicType a1, QA a2, BasicType a2, QA a3, BasicType a3, QA a4, BasicType a4, QA a5, BasicType a5, QA a6, BasicType a6, QA a7, BasicType a7, QA a8, BasicType a8, QA a9, BasicType a9, QA a10, BasicType a10) => TA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) 
(QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11), QA a1, BasicType a1, QA a2, BasicType a2, QA a3, BasicType a3, QA a4, BasicType a4, QA a5, BasicType a5, QA a6, BasicType a6, QA a7, BasicType a7, QA a8, BasicType a8, QA a9, BasicType a9, QA a10, BasicType a10, QA a11, BasicType a11) => TA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11) 
(QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12), QA a1, BasicType a1, QA a2, BasicType a2, QA a3, BasicType a3, QA a4, BasicType a4, QA a5, BasicType a5, QA a6, BasicType a6, QA a7, BasicType a7, QA a8, BasicType a8, QA a9, BasicType a9, QA a10, BasicType a10, QA a11, BasicType a11, QA a12, BasicType a12) => TA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12) 
(QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13), QA a1, BasicType a1, QA a2, BasicType a2, QA a3, BasicType a3, QA a4, BasicType a4, QA a5, BasicType a5, QA a6, BasicType a6, QA a7, BasicType a7, QA a8, BasicType a8, QA a9, BasicType a9, QA a10, BasicType a10, QA a11, BasicType a11, QA a12, BasicType a12, QA a13, BasicType a13) => TA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13) 
(QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14), QA a1, BasicType a1, QA a2, BasicType a2, QA a3, BasicType a3, QA a4, BasicType a4, QA a5, BasicType a5, QA a6, BasicType a6, QA a7, BasicType a7, QA a8, BasicType a8, QA a9, BasicType a9, QA a10, BasicType a10, QA a11, BasicType a11, QA a12, BasicType a12, QA a13, BasicType a13, QA a14, BasicType a14) => TA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14) 
(QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15), QA a1, BasicType a1, QA a2, BasicType a2, QA a3, BasicType a3, QA a4, BasicType a4, QA a5, BasicType a5, QA a6, BasicType a6, QA a7, BasicType a7, QA a8, BasicType a8, QA a9, BasicType a9, QA a10, BasicType a10, QA a11, BasicType a11, QA a12, BasicType a12, QA a13, BasicType a13, QA a14, BasicType a14, QA a15, BasicType a15) => TA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15) 
(QA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16), QA a1, BasicType a1, QA a2, BasicType a2, QA a3, BasicType a3, QA a4, BasicType a4, QA a5, BasicType a5, QA a6, BasicType a6, QA a7, BasicType a7, QA a8, BasicType a8, QA a9, BasicType a9, QA a10, BasicType a10, QA a11, BasicType a11, QA a12, BasicType a12, QA a13, BasicType a13, QA a14, BasicType a14, QA a15, BasicType a15, QA a16, BasicType a16) => TA (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16) 

table :: TA a => String -> Q [a]Source

tableDB :: TA a => String -> Q [a]Source

tableCSV :: TA a => String -> Q [a]Source

tableWithKeys :: TA a => String -> [[String]] -> Q [a]Source

class View a b | a -> b, b -> a whereSource

Methods

view :: a -> bSource

fromView :: b -> aSource

Instances

View (Q Bool) (Q Bool) 
View (Q Char) (Q Char) 
View (Q Double) (Q Double) 
View (Q Integer) (Q Integer) 
View (Q ()) (Q ()) 
View (Q Text) (Q Text) 
(QA a, QA b) => View (Q (a, b)) (Q a, Q b) 
(QA a1, QA a2, QA a3) => View (Q (a1, a2, a3)) (Q a1, Q a2, Q a3) 
(QA a1, QA a2, QA a3, QA a4) => View (Q (a1, a2, a3, a4)) (Q a1, Q a2, Q a3, Q a4) 
(QA a1, QA a2, QA a3, QA a4, QA a5) => View (Q (a1, a2, a3, a4, a5)) (Q a1, Q a2, Q a3, Q a4, Q a5) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6) => View (Q (a1, a2, a3, a4, a5, a6)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7) => View (Q (a1, a2, a3, a4, a5, a6, a7)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9, Q a10) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9, Q a10, Q a11) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9, Q a10, Q a11, Q a12) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9, Q a10, Q a11, Q a12, Q a13) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9, Q a10, Q a11, Q a12, Q a13, Q a14) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9, Q a10, Q a11, Q a12, Q a13, Q a14, Q a15) 
(QA a1, QA a2, QA a3, QA a4, QA a5, QA a6, QA a7, QA a8, QA a9, QA a10, QA a11, QA a12, QA a13, QA a14, QA a15, QA a16) => View (Q (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16)) (Q a1, Q a2, Q a3, Q a4, Q a5, Q a6, Q a7, Q a8, Q a9, Q a10, Q a11, Q a12, Q a13, Q a14, Q a15, Q a16) 

tuple :: View a b => b -> aSource

record :: View a b => b -> aSource

Template Haskell: Creating Table Representations

generateDatabaseRecordInstancesSource

Arguments

:: IConnection conn 
=> IO conn

Database connection

-> Q [Dec] 

Create corresponding Haskell record data types and generate QA and View instances for all tables in the database (except for system tables).

Example usage:

 $(generateDatabaseRecordInstances myConnection)

Note that the database information is queried at compile time, not at run time!

generateTableRecordInstancesSource

Arguments

:: IConnection conn 
=> IO conn

Database connection

-> String

Table name

-> String

Data type name for each row of the table

-> [Name]

Default deriving instances

-> Q [Dec] 

Lookup a database table, create corresponding Haskell record data types and generate QA and View instances

Example usage:

 $(generateTableRecordInstances myConnection "users" "User" [''Show,''Eq])

Note that the table information is queried at compile time, not at run time!

generateRecordInstances :: Q [Dec] -> Q [Dec]Source

Derive QA and View instances for record definitions

Example usage:

 $(generateRecordInstances [d|

     data User = User
         { userId    :: Int
         , userName  :: String
         }

   |])

This generates the following record type, which can be used in view patterns

 data UserV = UserV
     { userIdV    :: Q Int
     , userNameV  :: Q String
     }
 instance View (Q User) UserV

and the liftet record selectors:

 userIdQ      :: Q User -> Q Int
 userNameQ    :: Q User -> Q String

generateTableDeclarationsSource

Arguments

:: IConnection conn 
=> IO conn

Database connection

-> Q [Dec] 

Generate table declarations for all tables in the database. This function should be used in conjunction with generateDatabaseRecordInstances. For example, this function generates the following code for the table users:

 users :: Q [User]
 users = table "users"

csvImport :: FilePath -> Type -> IO NormSource

csvExport :: QA a => FilePath -> [a] -> IO ()Source

csvExportHandle :: QA a => Handle -> [a] -> IO ()Source

csvExportStdout :: QA a => [a] -> IO ()Source

jsonExport :: QA a => FilePath -> [a] -> IO ()Source

jsonExportHandle :: QA a => Handle -> [a] -> IO ()Source

jsonExportStdout :: QA a => [a] -> IO ()Source

xhtmlExport :: QA a => FilePath -> [a] -> IO ()Source

xhtmlExportHandle :: QA a => Handle -> [a] -> IO ()Source

xhtmlExportStdout :: QA a => [a] -> IO ()Source

module Data.Text

module Prelude