úÎ!=#9Å     SafeÕSafe+None-.=?@ACHMUVXå memdb ? description. Currently, there are two supported index types:  and  5. Both can be specified using the utility functions  word32Index and byteStringIndex, respectively.LFor example, one might define indexes over a datatype in the following way: !data Person = Person { name :: ! , age :: " } deriving (Generic, #) personIndexes = byteStringIndex #nameIndex ( . name) $  word32Index #ageIndex ($ . age)  unindexed TComposite or computed indexes can be built by supplying an appropriate function to   or  , e.g: personIndexes = byteStringIndex& #nameAndAgePlusOneIndex (\p ->  (name p % & (age p + 1)))  unindexed memdb2An immutable database containing elements of type a$, each one indexed according to an   description.Import Database.Immutable.Read for reading boxed values and Database.Immutable.Read.Unboxed for the unboxed variant. memdbType tying a typelevel ' to a value.  has an (O instance and can thus be created by using the overloaded labels syntax (i.e.  #someName ) when the OverloadedLabels GHC extension is enabled. memdb+Limit the number of elements read after an .memdbOffset into the database.)*+,-. /01 2 3 4 NonecmemdbDCreata a database from a list. Databases can be created back using  .memdbSWrite data sequentially to a database file. Database files can be read back using  .An additional file  path.meta5 is produced holding the number of written elements.memdb?Writing function; the continuation can be called multiple timesmemdbFile path, must be writeablememdb?Writing function; the continuation can be called multiple times   None-.HUVX1)memdbDefault  / description, specifying an unindexed database.memdbAdd a  index to an  2 description to be built when reading a database.memdbAdd a   index to an  2 description to be built when reading a database.memdbCreate a database from a  2 and build up in-memory indexes according to the   description.memdbRRead a database from a file path and build up in-memory indexes according to the   description.memdb Index namememdbIndex computing functionmemdbIndexes descriptionmemdb Resulting   desctiption, inlcuding the new  indexmemdb Index namememdbIndex computing functionmemdbIndexes descriptionmemdb Resulting   desctiption, inlcuding the new   indexmemdbSerialised elementsmemdb Element countmemdbpProgress indicating function, called with the number of elements currently read and the total count of elementsmemdbIndexes descriptionmemdb4Resulting database or a parse/deserializiation errormemdbFile path to databasememdbpProgress indicating function, called with the number of elements currently read and the total count of elementsmemdbIndexes descriptionmemdb4Resulting database or a parse/deserializiation error  (c) Philip Kamenarsky, 2018MITp.kamenarsky@gmail.com experimentalPOSIXNone-.HUVX9memdbO(1)6 Yield the database element at the specified position.memdbO(n)Q Yield a slice of the database. The database must contain at least i+n elements.memdbO(n) Lookup by index, n& being the count of returned elements.Example: Flookup personsDB #nameIndex "Phil" -- Return all elements named "Phil"memdb Index namememdb Index valuememdbDatabasememdbResulting items     Safe9 56789:;<=     !"#$%&'"()*+,-./"01"(2"34*+5"6789:;<== > ? @ A B C D EF$memdb-1.0.0.0-6jbWpSDD8NVAz0nJ0XG47VMultimap.ByteStringMultimap.Word32Database.ImmutableDatabase.Immutable.ReadDatabase.Immutable.WriteDatabase.Immutable.InternalBCpackbyteStringIndex word32IndexcreateDBreadDB Paths_memdbMultimapnewinsertlookup Word32IndexByteStringIndexIndexesDBNameLimitgetLimitIdgetIdincIdsubIdsfromListwriteDB unindexed!slicebaseGHC.WordWord32bytestring-0.10.8.2Data.ByteString.Internal ByteStringGHC.BaseStringghc-prim GHC.TypesInt%cereal-0.5.8.1-KRPM4Pfa6l3HK7sjbDz33xData.Serialize SerializeGHC.Real fromIntegral<>GHC.ShowshowSymbolGHC.OverloadedLabelsIsLabel InsertIndex insertIndex LookupIndex lookupIndex MapIndexesIndexes'version getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName