6.]I      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGH non-portable experimentalEdward Kmett <ekmett@gmail.com>None" Type level key types Value-level key types dSelect 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 I ( 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 type 3Used to store indices 4%The type used internally for columns 5Extract the value of a 4 6Every # has one   4 77... 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 ;UAdjust a record using meta-information about the table allowing for auto-increments. <This lets you define HE 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: H = < primaryKeyFieldJ!Find the primary key index a tab =Construct an empty relation >&Check to see if the relation is empty ?'Construct a relation with a single row KNReturn the set of rows that would be delete by deleting or inserting this row @]Delete this row from the database. This will remove any row that collides with the specified & row on any primary or candidate key. A3Insert a row into a relation, removing collisions. BRetrieve a row count. CConvert a list to and from a #. WThe 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,  L C M C "a Nalways holds. D?Traverse all of the rows in a table without changing any types ERTraverse all of the rows in a table, potentially changing table types completely. FBuild up a table from a list G,Generate a row with an auto-incremented key OSimple (key, value) pairs PQRS  !"#$%&'()*+,-./0123456789:;<JTUVW=>?K@ABCDEFGHXYZ[\]^_`abcdeOfghijklmnopqrstuvwxyz{|}~Q  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI#%$123456789:;=?CF>B !"A@EDHG< &0/.-,+*)('mPQRS   !"#%$& 0/.-,+*)('1 23456789:;<JTUVW=>?K@ABCDEFGHXYZ[\]^_`abcdeOfghijklmnopqrstuvwxyz{|}~           !"#$%&'()*+,-./0123456789:;<=>?@ABC?DEFGHFGIJKKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ tables-0.1 Data.TableAuto IsKeyTypekeyType InvertedHash InvertedIntInvertedSupplementalHashSupplementalInt Supplemental CandidateHash CandidateInt CandidatePrimaryKeyTypeWithwith deleteWithWithalwithAnywithAll deleteWithAny deleteWithAllGroupgroupTable EmptyTableAnIndexSupplementalMapSupplementalHashMapSupplementalIntMap InvertedMapInvertedHashMapInvertedIntMap CandidateMapCandidateHashMapCandidateIntMap PrimaryMapTabularPKTTabKeyfetchprimary primarilymkTabixTabforTabautoTab autoIncrementemptynull singletondeleteinsertcounttablerows'rowsfromListautoautoKey lens-3.8.1Control.Lens.Setterset primaryMap collisionsControl.Lens.IsofrombaseGHC.Base.id $fTabular(,)ValueHasValuevaluefromListConstr tableDataTypedeleteCollisionsemptyTab$fTabularValue$fHasValuepqfValueValueab$fComonadApplyValue$fComonadValue$fMonadFixValue $fMonadValue$fApplicativeValue$fWrappedabValueValue $fIxedfValue$fContainsfValue$fEachfValueValueab$fField1ValueValueab$fTabularIdentity$fHasValuepqfIdentityIdentityab$fHasValuepqf(,)(,)ab $fTabularAuto $fComonadAuto$fTraversableWithIndexIntAuto$fFoldableWithIndexIntAuto$fFunctorWithIndexIntAuto$fHasValuepqfAutoAutoab$fEachfAutoAutoab$fField2AutoAutoab$fField1AutoAutoIntInt$fIsKeyTypeInvertedHashHashSet$fIsKeyTypeInvertedIntIntSet$fIsKeyTypeInvertedSet$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$fEachfTableTableab $fAtTable $fIxedfTable$fContainsfTable$fFoldableTable $fReadTable $fShowTable $fOrdTable $fEqTable $fMonoidTable $fDataTableValueTabVal IdentityTabIdKVTabFstAutoTabAutoKey