úÎUÑKSO      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMN(C) 2012-2013 Edward Kmett, BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portableNone!"+-./23468<=GHKM0A key type for inverse keys. keys are like   keys but are backed by a O rather than a P&. This makes them more performant on (Q) and (R) lookups, but values at  keys must be instances of S and T. keys are like   keys but are backed by an U rather than a P2. This makes them more performant, but values at  keys may only be Vs. vA key type for supplemental data attached to each row that we still may want to index by. Values need not be unique.   keys are like   keys but are backed by a O rather than a P&. This makes them more performant on (Q) and (R) lookups, but values at   keys must be instances of S and T.   keys are like   keys but are backed by an U rather than a P2. This makes them more performant, but values at   keys may only be Vs. =A key type for values unique to each row, but that are not  . dThe key type for the canonical, unique identifier attached to every row. There should only be one   key.Value-level key typescSelect a smaller, updateable subset of the rows of a table using an index or an arbitrary function.!Delete selected rows from a table  p cmp a t "a W ( p cmp a) > tSearch inverted indices"+Group by a given key or arbitrary function.#Every # has a   key and may have  ,   or  keys, plus their variants.&%This is used to store a single index.1;This class describes how to index a user-defined data type.2The primary key type3Used to store indices4$The type used internally for columns5Extract the value of a 46Every # has one   476... and so if you find one, it had better be that one!8 Construct a 3$ given a function from key to index.9Lookup an index in a 3:Loop over each index in a 3;TAdjust a record using meta-information about the table allowing for auto-increments.<This lets you define ND to increment to 1 greater than the existing maximum key in a table.’In order to support this you need a numeric primary key, and the ability to update the primary key in a record, indicated by a lens to the field.6To enable auto-increment for a table with primary key primaryKeyField, set: ; = < primaryKeyFieldX Find the primary key index a tab=ŒGenerate a Tabular instance for a data type. Currently, this only works for types which have no type variables, and won't generate autoTab. Œdata Foo = Foo { fooId :: Int, fooBar :: String, fooBaz :: Double } makeTabular 'fooId [(''Candidate, 'fooBaz), (''Supplemental, 'fooBar)] >Construct an empty relation?%Check to see if the relation is empty@&Construct a relation with a single rowYMReturn the set of rows that would be delete by deleting or inserting this rowA‚Delete this row from the database. This will remove any row that collides with the specified row on any primary or candidate key.B2Insert a row into a relation, removing collisions.C2Insert a row into a relation, removing collisions.D2Insert a row into a relation, ignoring collisions.ERetrieve a row count.FConvert a list to and from a #.±The real isomorphism laws hold if the original list makes no use of the auto-increment functionality of the table, has no duplicates and is sorted according to the primary key.However, Z F [ F "a \ always holds.GQTraverse all of the rows in a table, potentially changing table types completely.HBuild up a table from a listI=Build up a table from a list, without checking for collisionsJ#Left-biased union of the two tablesThis is a synonym for ]KbReturn the elements of the first table that do not share a key with an element of the second tableL[Return the elements of the first table that share a key with an element of the second tableM+Generate a row with an auto-incremented key^<Compatibility shim for recent changes to template haskell's _`Simple (key, value) pairsÀab  !"#$%&'()*+,-./0123456789:;cdefghij<Xklmnop=>?@YABCDEFGHIJKLMNq^rstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ`‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍW  !"#$%&'()*+,-./0123456789:;cdefghij<=>?@ABCDEFGHIJKLMNO#%$123456789:;=>@FHIJKL?E !"BCDAG NM<&0/.-,+*)('†ab   !"#%$& 0/.-,+*)('1 23456789:;<Xklmnop=>?@YABCDEFGHIJKLMNq^rstuvwxyz{|}c~d€‚ƒ„…†‡ˆ‰Š‹eŒf`Žgh’i‘j“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎ           !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMKLNOPQKLRHSTKUVWXYZ[W\]^_`^_a^bcdefghiijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕtables-0.4.1.1 Data.TableAuto IsKeyTypekeyType InvertedHash InvertedIntInvertedSupplementalHashSupplementalInt Supplemental CandidateHash CandidateInt CandidatePrimaryKeyTypeWithwith deleteWithWithalwithAnywithAll deleteWithAny deleteWithAllGroupgroupTable EmptyTableAnIndexSupplementalMapSupplementalHashMapSupplementalIntMap InvertedMapInvertedHashMapInvertedIntMap CandidateMapCandidateHashMapCandidateIntMap PrimaryMapTabularPKTTabKeyfetchprimary primarilymkTabixTabforTabautoTab autoIncrement makeTabularemptynull singletondeleteinsertinsert' unsafeInsertcounttablerowsfromListunsafeFromListunion difference intersectionautoautoKeyunordered-containers-0.2.5.1Data.HashMap.BaseHashMapcontainers-0.5.5.1 Data.Map.BaseMapghc-prim GHC.Classes==/=hashable-1.2.3.1Data.Hashable.ClassHashableEqData.IntMap.BaseIntMap GHC.TypesIntlens-4.7Control.Lens.Setterset primaryMap collisionsControl.Lens.IsofrombaseGHC.Base.id Data.Monoidmappend tySynInstD'template-haskellLanguage.Haskell.TH.Lib tySynInstD $fTabular(,)ValueValueTabVal IdentityTabIdKVTabFstAutoTabAutoKeyfromListConstr tableDataTypeanonnildeleteCollisionsemptyTabequalP'$fNFDataAnIndex$fNFDataAnIndex0$fNFDataAnIndex1$fNFDataAnIndex2$fNFDataAnIndex3$fNFDataAnIndex4$fNFDataAnIndex5$fNFDataAnIndex6$fNFDataAnIndex7$fNFDataAnIndex8 $fNFDataTableTFCo:R:TabValueiTFCo:R:KeypValueb$fTabularValue$fComonadApplyValue$fComonadValue$fMonadFixValue $fMonadValue$fApplicativeValue$fWrappedValue $fIxedValue$fEachValueValueabTFCo:R:IxValueValueTFCo:R:IndexValue$fField1ValueValueabTFCo:R:TabIdentityiTFCo:R:KeypIdentityb$fTabularIdentityTFCo:R:Tab(,)iTFCo:R:Keyp(,)bTFCo:R:TabAutoiTFCo:R:KeypAutob $fTabularAuto$fSafeCopyAuto$fSerializeAuto $fBinaryAuto $fComonadAuto$fTraversableWithIndexIntAuto$fFoldableWithIndexIntAuto$fFunctorWithIndexIntAuto$fEachAutoAutoabTFCo:R:IndexAuto$fField2AutoAutoab$fField1AutoAutoIntInt$fIsKeyTypeInvertedHasht$fIsKeyTypeInvertedIntIntSet$fIsKeyTypeInvertedt$fIsKeyTypeSupplementalHasha$fIsKeyTypeSupplementalInta$fIsKeyTypeSupplementala$fIsKeyTypeCandidateHasha$fIsKeyTypeCandidateInta$fIsKeyTypeCandidatea$fIsKeyTypePrimarya $fWithKeyt $fWithKeyt0 $fWithKeyt1 $fWithKeyt2 $fWithKeyt3 $fWithKeyt4 $fWithKeyt5 $fWith(->)t$fWithalKey[]t$fWithalKey[]t0$fWithalKey[]t1$fWithal(->)[]t $fGroupfKeyta$fGroupfKeyta0$fGroupfKeyta1$fGroupfKeyta2$fGroupfKeyta3$fGroupfKeyta4$fGroupfKeyta5$fGroupfKeyta6$fGroupfKeyta7$fGroupfKeyta8$fGroupf(->)ta$fEachTableTableab $fAtTable $fIxedTableTFCo:R:IxValueTableTFCo:R:IndexTable$fFoldableTable $fReadTable $fShowTable $fOrdTable $fEqTable $fMonoidTable$fSafeCopyTable$fSerializeTable $fBinaryTable $fDataTable