úÎu'o½9      !"#$%&'()*+,-./012345678 Safe-Inferred3Output of the ): function. Contains the created table and the keys to it. Type of table specifications. 'Other tables that should be referenced  by values of this one. Keys for the table-to-be FType that is a template for references to another table. Used only in s.  Type t% is an abstract type, same as in the  .  Type a is a type of values in that  .  Type u is either  or , = depending on whether the reference, accompanying the value, * should be single-value or multiple-value 2Type that is a template for the key. Used only in s.  Type t% is an abstract type, same as in the  .  Type a is a type of values in that  .  Type i. is a type of index values, used by this key.  Type u is either  or  , depending on whether this key 9 allows different values to have the same index, or not. "Abstract type, which allows us to * one or many values from the  .  Type t% is an abstract type, same as in the  .  Type a* is a type of values, also same as in the  .  Type i. is a type of index values, used by this key.  Type u is either  or  , depending on whether this key 9 allows different values to have the same index, or not. ?Abstract type, which represents a collection of values of type a, 4 possibly accompanied with some references to other  s.  The type t0 is an abstract type, used to ensure that we don' t confuse 0 different tables with values of the same type.  r2 is a type of references accompanying each value. NClass of the part of reference specification, corresponding to one reference. 1Combining operator for reference specifications. #One table reference specification.  Note that it can't be used in the  field by itself, $ but rather should be combined with  with the   operator. Empty reference specification.  It doesn'$t specify any reference whatsoever. 5Class of table reference specifications, used in the  field of the . BClass of the part of key specification, corresponding to one key. +Combining operator for key specifications. One key specification.  Note that it can't be used in the  field by itself, $ but rather should be combined with  with the  operator. Empty key specification.  It doesn't specify any key whatsoever. )Class of key specifications, used in the  field of the . 0Reference to multiple values in a single table. +Reference to a single value in some table. Base type for  and   Type t% is an abstract type, same as in the  .  Type a0 is a type of value, which can be obtained with unVar,  also same as in the  . Closed class.  It'Es instances allow us to choose whether we want to get a single value  or multiple ones. 2This type specifies that we want multiple values. 1This type specifies that we want a single value. 9 that can fail.  Note that it doesn'%t revert the transaction on failure. 9Function that converts a list of single-value references ' to a single multiple-value reference. $ Normally it should only be used in cInsert statments. 2Function that converts a multiple-value reference ' to a list of single-value references. J Should be used with multiple-value references accompanying values in the  . !Splitting keys. "Splitting references. #"This is a more generic version of %. O The difference is that value index will be calculated based on both the value  and it's accompanying references. $"This is a more generic version of &. O The difference is that value index will be calculated based on both the value  and it's accompanying references. %8This key will provide access to a single value within a  .  It'7s index will be calculated, based on this value alone. &<This key will provide access to multiple values in the same  . < Their indices will be calculated based on the value alone. 'SEach value in the table-to-be should be accompanied with a single-value reference. (UEach value in the table-to-be should be accompanied with a multiple-value reference. )LFunction that creates the table (along with keys and everything) based on a . *'Function that selects one value from a . / Note that the value is not returned directly. O Instead, a reference to it is returned, which allows to get other references,  accompanying that value in the  . +A more generic version of *2. Instead of one value, it returns multiple ones. Y It can also select values with indices that are smaller or greater to the provided one, ? depending on the third argument, which could be anything like (>), (<=), (/=),  or even  return True.   select_ k i (==) ~~ [select k i] , A variant of +3, which allows to choose two bounds for the index. P Additional boolean arguments show whether to include bounds themselves or not. -4Function that lets one to insert a new value to the  . @ Of course, we have to provide accompanying references as well. J This function can fail if some key clashes with an already existing one. ./Function that dereferences a value from table. " Note that we have to provide the   along with . /;Function that reads all references accompanying the value. 0More generic version of 1. B It allows changing accompanying references as well as the value. 1BFunction that writes another value to the referenced place in the  .  It doesn'&t change the accompanying references. O In case that it fails due to some single-value key prohibiting the new value,  nothing is changed, and the   remains the same. 2EFunction that removes the value (along with accompanying references)  from the  2. It only fails if the value was already removed. 3The most generic version of 5. = Not only it allows to change the way values are serialized, : it also permits side-effects during the deserialization. " The table is still filled in one 9 transaction, 5 thus avoiding any difficulties with multithreading. 4More generic version of 5 6 that allows to change the way values are serialized. 5QFunction that makes it possible to read the table from the file or other source. M Table should be created beforehand, as specifications are not serializable. 6The most generic version of 8. = Not only it allows to change the way values are serialized, 8 it also permits side-effects during the serialization.  The table is still read in one 9 transaction, 5 thus avoiding any difficulties with multithreading. 7More generic version of 8 6 that allows to change the way values are serialized. 8QFunction that makes it possible to write the table to the file or other storage. i:;<=>?@AB C DE FGHIJKLMNOPQRSTUVWXYZ[\ !"#$%&'(]^)*_+, lower bound including lower bound?  upper bound including upper bound? -./012345678`abcdefghi9  !"#$%&'()*+,-./0123456789  ./'( "%&#$!)*+,-102543876B:;<=>?@AB C DE  FGHIJKLMNOPQRSTUVWXYZ[\ !"#$%&'(]^)*_+,-./012345678`abcdefghij        !"#$%&'()*+,-./01234567889:;< =>?@ABCCDEFFGHIJKLMNOPQRSTUVWXYZ[\]^hmemdb-0.3.1.0 Data.HMemDbCreatedSpecsRefssKeysTableRefKeySpecKeyTable RefsComponent:&:RefRefsRefsC KeysComponent:+:KeyRefKeysKeysC TableVarsTableVar TableVarU MultitudeMultipleSingleMSfromListtoListsplitKeysplitRefsingle_ multiple_singlemultipleonlysome createTableselectselect_ selectBetweeninsertreadVarreadRefsupdate_updatedelete getTable__ getTable_getTable putTable__ putTable_putTablebase GHC.Conc.SyncSTM KeyProcesskpBackkpMapksValkValputRefsComponentgetRefsComponentputRefsgetRefsforKeysComponentforKeysPreTabletMaptKeyKeyBackkbMapkbKeytvValmToList mSingletonmInsertmDeletemValsVal liftMaybe insertMapforKeys_ listUnMaybe$fRefsComponentRef $fRefsC:&: $fRefsCRefs$fKeysComponentKeyRef $fKeysC:+: $fKeysCKeys$fMultitudeMultiple$fBinaryMultiple$fMultitudeSingle$fBinarySingle