h$A:      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~(c) 2021 Francisco Vallarino#BSD-3-Clause (see the LICENSE file)fjvallarino@gmail.com experimental non-portableNone2<8)libmdbxFlags for cursor operations.libmdbx=Cursor instance. Used for efficient navigation in a database.libmdbx&Flags for all data related operations.!libmdbx8Binary blob representing a key or value in the database.%libmdbxFlags for a database./libmdbx>Database instance. Represents a logical table in the database.0libmdbxFlags for a transaction.7libmdbxTransaction instance. Needed for all operations with data, even reading.9libmdbxUNIX permissions to set on created files. Zero value means to open existing, but do not create.:libmdbx!Flags for opening an environment.Llibmdbx2Environment object, needed for all the operations.Nlibmdbx)Error codes for the different operations.}libmdbxCreates an environment. Represents a database in the file system.~libmdbxSets geometry of an environment. All the parameters can receive -1 to keep the current value. Receives (expressed in bytes): size_lower, size_now, size_upper, growth_step, shrink_threshold, pagesize.libmdbx4Opens an environment. Receives name, flags and mode.libmdbxCloses an environment.libmdbxBegins a new transaction. Arguments: Environment.Parent transaction, or Nothing.Flags.libmdbxCommits a transaction.libmdbxAborts a transaction.libmdbx(Gets the environment from a transaction.libmdbxOpens a database. Arguments: Transaction.Name.Flags.libmdbxCloses a database.libmdbxSample empty valuelibmdbxStores a key/value pair. Arguments: Transaction. Database.Key.Value.libmdbx Gets a value with the given key. Arguments: Transaction. Database.Key.libmdbx Gets a value with the given key. Arguments: Transaction. Database.Key.libmdbxOpens a new cursor. Arguments: Transaction. Database.libmdbxCloses a cursor.libmdbx#Removes the current key/value pair.libmdbx#Returns the current key/value pair.libmdbx#Sets the value for the current key. Arguments:Cursor.Key.Value.FLags.libmdbx3Returns the count of duplicates in the current key.libmdbx0Returns the description of a given error number.libmdbx%Compares two values as a binary blob.libmdbxConverts a Double value to an unsigned Word that can be used by libmdbx's compare function.Converts a Float value to an unsigned Word that can be used by libmdbx's compare function.libmdbxConverts a 32bits signed Int value to an unsigned Word that can be used by libmdbx's compare function.libmdbxConverts a 64bits signed Int value to an unsigned Word that can be used by libmdbx's compare function.libmdbx+Converts an unsigned Word to a Float value.libmdbx,Converts an unsigned Word to a Double value.libmdbx7Converts an unsigned Word value to a 32bits signed Int.libmdbx7Converts an unsigned Word value to a 64bits signed Int.  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~:;<=>?@ABCDEFGHIJKLM9}~012345678%&'()*+,-./!"#$  NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|(c) 2021 Francisco Vallarino#BSD-3-Clause (see the LICENSE file)fjvallarino@gmail.com experimental non-portableNone<# libmdbxNewtype wrapping a  that provides a  instance using NULL terminated C strings, which allows for using them as part of a custom data type representing a key.Check  for the rationale.libmdbxNewtype wrapping a  that provides a  instance using NULL terminated C strings, which allows for using them as part of a custom data type representing a key."This is not possible with regular  and  instances since their  instances are serialized with the size field first. Given that libmdbx compares keys as an unstructured sequence of bytes, this can cause issues since longer strings are considered greater than shorter ones, even if their content indicates otherwise.libmdbxConverts an instance to/from the representation needed by libmdbx. This type is used for both keys and values. The fields on the type must be strict, otherwise unexpected crashes due to lazy IO delaying low level memory access may happen.Only ,  instances are provided, since they are commonly used as the key when storing/retrieving a value.For your own types, in general, you will want to use a serialization library such as  *https://hackage.haskell.org/package/binarybinary+, and apply the newtype deriving via trick.  is provided to simplify using  1 instances as keys or values with libmdbx, while  % provides the same functionality for    instances. With those helpers, creating custom types compatible with libmdbx is easy: data User = User { _username :: !Text, _password :: !Text } deriving (Eq, Show, Generic, Store) deriving via (MdbxItemBinary User) instance MdbxItem User Note 1: if you plan on using a custom type as the key, be careful if it contains  or  instances, since these types have a length field which is serialized before the data. This causes issues when using libmdbx, since it depends on key ordering and the length field will make shorter instances lower than longer ones, even if the content indicates the opposite. You can use the provided  or + types if your data type is an instance of  or   ". Otherwise, it is simpler to use  or  as the key.Note 2: If your key type contains Word16 or longer fields, you should make it an instance of , not   , since Store uses platform dependent endianess and this affects libmdbx's comparison functions. Given Binary uses network order (big endian) for encoding, the comparison functions will work as expected. Failing to do this may cause unexpected issues when retrieving data, in particular when using cursors.Note 3: The behavior when using signed integers or floating point numbers as part of the key is undefined. To be able to use these types in the key, you should store them as a Word of the appropriate size and convert them with the conversion functions included in  .libmdbxConverts a block of memory provided by libmdbx to a user data type. There are no guarantees provided by the library that the block of memory matches the expected type; a crash can happen when trying to deserialize an incorrect type.libmdbx/Converts a user data type to a block of memory.libmdbxGeometry of the database. The most important parameter is the maximum size, that defaults to 1024Mb. All other values default to -1, meaning the current value will be kept.libmdbxMinimum DB size in bytes.libmdbxCurrent DB size in bytes.libmdbxMaximum DB size in bytes.libmdbxStep growth size of the database in bytes. Must be greater than zero to allow for growth.libmdbxStep shrink size of the database in bytes. Must be greater than zero to allow for shrinkage and lower than envGrowthStep to avoid immediate shrinking after growth.libmdbxPage size of the database in bytes. In general it should not be changed after the database was created.  !"#$%&'()*+,-./012345679:;<=>?@ABCDEFGHIJKLL7/!"#$9:;<=>?@ABCDEFGHIJK0123456%&'()*+,-.  (c) 2021 Francisco Vallarino#BSD-3-Clause (see the LICENSE file)fjvallarino@gmail.com experimental non-portableNone2<=%libmdbxHelper type to derive " instances for types implementing " using the newtype deriving trick.libmdbxDeserializes a  instance from an !.libmdbx Serializes a  instance to !, and passes it to a callback.(c) 2021 Francisco Vallarino#BSD-3-Clause (see the LICENSE file)fjvallarino@gmail.com experimental non-portableNone2<=&libmdbxHelper type to derive " instances for types implementing " using the newtype deriving trick.(c) 2021 Francisco Vallarino#BSD-3-Clause (see the LICENSE file)fjvallarino@gmail.com experimental non-portableNone?.^libmdbxCompares two keys and returns -1, 0 or 1 if key1 is lower, equal or greater than key2.libmdbxOpens an environment.libmdbxClose an environment.libmdbxBegins a transaction.libmdbxCommits a transaction.libmdbxAborts a transaction.libmdbxOpens a database (table).libmdbxCloses a database.libmdbx6Returns the value associated to the given key, if any.libmdbx"Saves the provided key/value pair.libmdbx8Deletes the value associated with the given key, if any.libmdbxOpens a cursor.libmdbxCloses a cursor.libmdbxStores the provided value at the given key, positioning the cursor on it.libmdbx*Deletes the value at the current position.libmdbx'Moves to the first key on the database.libmdbx&Moves to the last key on the database.libmdbxMoves to the given key.libmdbxMoves to the given key or first greater than it. Useful for searching.libmdbxMoves to the next key.libmdbxMoves to the previous key.libmdbx.Moves the cursor using the provided operation.libmdbxConverts a Float value to an unsigned Word that can be used by libmdbx's compare function.libmdbxConverts a Double value to an unsigned Word that can be used by libmdbx's compare function.libmdbxConverts a 32bits signed Int value to an unsigned Word that can be used by libmdbx's compare function.libmdbxConverts a 64bits signed Int value to an unsigned Word that can be used by libmdbx's compare function.libmdbx+Converts an unsigned Word to a Float value.libmdbx,Converts an unsigned Word to a Double value.libmdbx7Converts an unsigned Word value to a 32bits signed Int.libmdbx7Converts an unsigned Word value to a 64bits signed Int.(c) 2021 Francisco Vallarino#BSD-3-Clause (see the LICENSE file)fjvallarino@gmail.com experimental non-portableNone9' libmdbx8Returns the value associated with the given key, if any.libmdbxReturns the values associated to a list of keys. Returned length may not match that of provided keys in case some of them are not found.libmdbxReturns the list of values whose keys lie between the provided range.libmdbxReturns the list of key/value pairs whose keys lie between the provided range.libmdbxReturns the minimum and maximum keys, and their respective values, between the provided key range.Both start and end keys are inclusive, thus the same key/value pairs will be returned if they exist. Otherwise, the next/previous valid key/value pairs will be returned respectively.libmdbxSaves the given key/value pair.libmdbx>Saves the given key/value pairs. Runs in a single transaction.libmdbx7Deletes the item associated with the given key, if any.libmdbxDeletes the items associated with the given keys, if any. Runs in a single transaction.libmdbx=Deletes the values whose keys lie between the provided range. libmdbxThe environment.libmdbx The database.libmdbxThe key to lookup.libmdbxThe matching value, if any.libmdbxThe environment.libmdbx The database.libmdbxThe keys to lookup.libmdbx7The matching values. Length may not match that of keys.libmdbxThe environment.libmdbx The database.libmdbx#The start of the range (inclusive).libmdbx!The end of the range (inclusive).libmdbxThe matching values.libmdbxThe environment.libmdbx The database.libmdbx#The start of the range (inclusive).libmdbx!The end of the range (inclusive).libmdbxThe matching pairs.libmdbxThe environment.libmdbx The database.libmdbx#The start of the range (inclusive).libmdbx!The end of the range (inclusive).libmdbxThe bounding pairs, if any.libmdbxThe environment.libmdbx The database.libmdbxThe key.libmdbx The value.libmdbxThe environment.libmdbx The database.libmdbxThe list of key/value pairs.libmdbxThe environment.libmdbx The database.libmdbxThe key to delete.libmdbxThe environment.libmdbx The database.libmdbxThe keys to delete.libmdbxThe environment.libmdbx The database.libmdbx#The start of the range (inclusive).libmdbx!The end of the range (inclusive).  (c) 2021 Francisco Vallarino#BSD-3-Clause (see the LICENSE file)fjvallarino@gmail.com experimental non-portableNone9  !"#$%.-,+*)(&'/065431279:KJIHGFEDCBA@?>=;?@ABCDEFFGHIJKLMNOPQRSTUVWXYZZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     &libmdbx-0.2.1.0-GPYxAgBY4B53idp8FOP71QMdbx.FFI Mdbx.Types Mdbx.Store Mdbx.BinaryMdbx.API Mdbx.Database Data.BinaryBinaryMdbxItemBinary Data.Store MdbxItemStoreStoreModuleAPIMdbx Paths_libmdbx MdbxCursorOp MdbxFirst MdbxFirstDup MdbxGetBothMdbxGetBothRangeMdbxGetCurrentMdbxGetMultipleMdbxLast MdbxLastDupMdbxNext MdbxNextDupMdbxNextMultiple MdbxNextNodupMdbxPrev MdbxPrevDup MdbxPrevNodupMdbxSet MdbxSetKey MdbxSetRangeMdbxPrevMultipleMdbxSetLowerbound MdbxCursor MdbxPutFlags MdbxUpsertMdbxNooverwrite MdbxNodupdata MdbxCurrent MdbxAlldups MdbxReserve MdbxAppend MdbxAppenddup MdbxMultipleMdbxValmvlSizemvlData MdbxDbFlagsMdbxDbDefaultsMdbxReversekey MdbxDupsortMdbxIntegerkey MdbxDupfixedMdbxIntegerdupMdbxReversedup MdbxCreate MdbxDbAccedeMdbxDbi MdbxTxnFlagsMdbxTxnReadwrite MdbxTxnNosync MdbxTxnRdonlyMdbxTxnNometasyncMdbxTxnRdonlyPrepare MdbxTxnTryMdbxTxn MdbxEnvMode MdbxEnvFlagsMdbxEnvDefaultsMdbxSyncDurable MdbxNosubdirMdbxSafeNosync MdbxMapasync MdbxRdonlyMdbxNometasync MdbxWritemapMdbxUtterlyNosync MdbxNotls MdbxExclusive MdbxNordahead MdbxNomeminit MdbxCoalesceMdbxLiforeclaimMdbxPageperturb MdbxAccedeMdbxEnv MdbxError MdbxKeyexistMdbxFirstLmdbErrcode MdbxNotfoundMdbxPageNotfound MdbxCorrupted MdbxPanicMdbxVersionMismatch MdbxInvalid MdbxMapFull MdbxDbsFullMdbxReadersFull MdbxTxnFullMdbxCursorFull MdbxPageFullMdbxUnableExtendMapsizeMdbxIncompatible MdbxBadRslot MdbxBadTxnMdbxBadValsize MdbxBadDbi MdbxProblemMdbxLastLmdbErrcodeMdbxBusyMdbxFirstAddedErrcode MdbxEmultival MdbxEbadsignMdbxWannaRecoveryMdbxEkeymismatch MdbxTooLargeMdbxThreadMismatchMdbxTxnOverlappingMdbxLastAddedErrcodeMdbxResultTrue MdbxSuccessMdbxResultFalse MdbxEperm MdbxEnofile MdbxEintrMdbxEio MdbxEnomem MdbxEaccess MdbxEremote MdbxEinval MdbxErofs MdbxEnosys MdbxEnodatamdbx_env_createmdbx_env_set_geometry mdbx_env_openmdbx_env_closemdbx_txn_beginmdbx_txn_commitmdbx_txn_abort mdbx_txn_env mdbx_dbi_openmdbx_dbi_close emptyMdbxValmdbx_putmdbx_getmdbx_delmdbx_cursor_openmdbx_cursor_closemdbx_cursor_delmdbx_cursor_getmdbx_cursor_putmdbx_cursor_count mdbx_strerrormdbx_cmpmdbx_key_from_floatmdbx_key_from_doublemdbx_key_from_int32mdbx_key_from_int64mdbx_float_from_keymdbx_double_from_keymdbx_int32_from_keymdbx_int64_from_key$fEnumMdbxError$fEnumMdbxEnvFlags$fEnumMdbxTxnFlags$fEnumMdbxDbFlags$fStorableMdbxVal$fEnumMdbxPutFlags$fShowMdbxCursorOp$fEqMdbxCursorOp$fOrdMdbxCursorOp$fEnumMdbxCursorOp$fShowMdbxPutFlags$fEqMdbxPutFlags$fOrdMdbxPutFlags $fEqMdbxVal $fShowMdbxVal$fShowMdbxDbFlags$fEqMdbxDbFlags$fOrdMdbxDbFlags$fShowMdbxTxnFlags$fEqMdbxTxnFlags$fOrdMdbxTxnFlags$fShowMdbxEnvFlags$fEqMdbxEnvFlags$fOrdMdbxEnvFlags$fShowMdbxError $fEqMdbxError$fOrdMdbxError$fStorableMdbxCursor$fStorableMdbxTxn$fStorableMdbxEnvNullText unNullTextNullByteStringunNullByteStringMdbxItem fromMdbxVal toMdbxValMdbxEnvGeometry envSizeMin envSizeNow envSizeMax envGrowthStepenvShrinkThreshold envPageSize$fDefaultMdbxEnvGeometry$fMdbxItemByteString$fMdbxItemText$fIsStringNullByteString$fShowNullByteString$fIsStringNullText$fShowNullText $fEqNullText $fOrdNullText$fEqNullByteString$fOrdNullByteString$fEqMdbxEnvGeometry$fShowMdbxEnvGeometry unwrapStore fromMdbxStore withMdbxStore$fStoreNullText$fStoreNullByteString$fMdbxItemMdbxItemStore unwrapBinary$fBinaryNullText$fBinaryNullByteString$fMdbxItemMdbxItemBinary$fMdbxItemNullText$fMdbxItemNullByteStringkeyCmpenvOpenenvClosetxnBegin txnCommittxnAbortdbiOpendbiCloseitemGetitemPutitemDel cursorOpen cursorClose cursorPut cursorDel cursorFirst cursorLastcursorAt cursorRange cursorNext cursorPrev cursorMove keyFromFloat keyFromDouble keyFromInt32 keyFromInt64 floatFromKey doubleFromKey int32FromKey int64FromKeygetItemgetItemsgetRange getRangePairs getBoundsputItemputItemsdelItemdelItemsdelRange text-1.2.3.2Data.Text.InternalTextbytestring-0.10.10.0Data.ByteString.Internal ByteString#store-0.7.12-5DldddSAjcI4TgTakUwUnLData.Store.Implbinary-0.8.8.0Data.Binary.Classversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName