úÎ!J <²      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±None =?@ACM_ :²dynamodb-simple Supply monad.³dynamodb-simpleSupply monad transformer.´dynamodb-simpleGet n supplies. ²³µ¶·¸´¹º»¼None0½dynamodb-simple>Create lenses if the field in the primary table starts with _.¸class Test_lens_field00 a b | a -> b where _field :: Functor f => (b -> f b) -> a -> f a instance Test_lens_field00 Test (Maybe T.Text) where field f t = (txt -> t{_field=txt})  $ f (_field t)¾dynamodb-simple5Reify name and return list of record fields with type½¿À¾None_­Ádynamodb-simpleJCreate function that converts complete structure from index back to table.iDynamoDB limits total number of attribute projections to 20, so this may not be as useful as it appears.ÁNone%&'.8=>?@ACHPXg3¢dynamodb-simpleOperation on range key for  .dynamodb-simplefClass to limit certain operations to text-like only in queries. Members of this class can be keys to Â. dynamodb-simple'Class to limit +=. and -=. for updates. dynamodb-simple>Typeclass showing that this datatype can be saved to DynamoDB. dynamodb-simpleEncode data. Return à if attribute should be omitted.dynamodb-simpleDecode data. Return à on parsing error, gets Ã7 on input if the attribute was missing in the database.dynamodb-simple8Decode data. Return (Left err) on parsing error, gets Ã~ on input if the attribute was missing in the database. The default instance uses dDecode, define this just for better errorsdynamodb-simpleÉAid for searching for empty list and hashmap; these can be represented both by empty list and by missing value, if this returns true, enhance search. Also used by joins to weed out empty foreign keysdynamodb-simpleXTypeclass signifying that this is a scalar attribute and can be used as a hash/sort key. zinstance DynamoScalar Network.AWS.DynamoDB.Types.S T.Text where scalarEncode = ScS scalarDecode (ScS txt) = Just txtdynamodb-simple)Scalars must have total encoding functiondynamodb-simple#Datatype for encoding scalar valuesdynamodb-simple2Exceptions thrown by some dynamodb-simple actions.#dynamodb-simple€Don't use Double as a part of primary key in a table. It is included here for convenience to be used as a range key in indexes.$dynamodb-simple€Double as a primary key isn't generally a good thing as equality on double is sometimes a little dodgy. Use scientific instead.%dynamodb-simpleHelper for tagged values,dynamodb-simpleLPartial encoding/decoding Aeson values. Empty strings get converted to NULL..dynamodb-simple(DynamoDB cannot represent empty items; [Ä a] will lose Nothings.0dynamodb-simpleÄ (Ä a) will not work well; it will join the value in the database.    None&'.=>?@AHPVXGòÅdynamodb-simple+Allow skipping over maybe types when using .Edynamodb-simpleQuery directionHdynamodb-simple:Parameter for queries involving read consistency settings.Kdynamodb-simpleBFilter condition. Use with scan, query, update and delete methods.(Filtering on primary key is not allowed.Ldynamodb-simpleNegate conditionÆdynamodb-simple:Class to get a column name from a Type specifying a columnÇdynamodb-simple7Signifies that the column is present in the table/indexÈdynamodb-simple?Internal representation of a part of path in a nested structureMdynamodb-simple-Representation of a column for filter queries&typ - datatype of column (Int, Text..)7coltype - TypColumn or TypSize (result of size(column))8col - instance of ColumnInfo, uniquely identify a columnÉdynamodb-simple%Smart constructor for Column datatypeÊdynamodb-simpleDReturn filter expression, attribute name map and attribute value mapËdynamodb-simpleLens to help set consistency.Ndynamodb-simple*Combine attributes from nested structures. address' <.> street'Odynamodb-simple!Access an index in a nested list. users' <!> 0 <.> name'Pdynamodb-simple!Access a key in a nested hashmap. !phones' <!:> "mobile" <.> number'/ÅEGFHJIKÌÍÎÏÐLÑÒÓÔÕÆÖÇרÙÈÚÛMÜÝÞßàÉáâÊãäåæçËNOPN7O8P8None &'.>XTÓ Qdynamodb-simple Numeric/string range comparison.Rdynamodb-simple6a IN (b, c, d); the list may contain up to 100 values.Sdynamodb-simpleCheck existence of attribute.Tdynamodb-simple$Checks non-existence of an attributeUdynamodb-simpleComparison for text columns.Vdynamodb-simple,CONTAINS condition for text-like attributes.Wdynamodb-simpleCONTAINS condition for sets.Xdynamodb-simple/Size (i.e. number of bytes) of saved attribute.Ydynamodb-simpleAND for combining conditions.Zdynamodb-simpleOR for combining conditions[dynamodb-simpleRTests for equality. Automatically adjusts query to account for missing attributes.:Note: checks against empty values esentially translate to T.\dynamodb-simple a /= b === Not (a == b)KLQRSTUVWXYZ[\]^_`KLYZ[\`_]^STUVWRQXY3Z3[4\4]4^4_4`4 None&'-.8=>?@ACHSUVXnadynamodb-simple>Class for indexes that contain primary key of the parent tableèdynamodb-simple3Extract table primary key from an item, if possiblebdynamodb-simple+Class representing a Global Secondary Indexédynamodb-simple Parameter type for queryKeyRangecdynamodb-simpleIType family that returns a primary key of a table/index depending on the g parameter.ddynamodb-simple,Class for tables/indexes that can be scannedêdynamodb-simple Return table name and index nameedynamodb-simple,Class for tables/indexes that can be queriedëdynamodb-simple Return table name and index nameìdynamodb-simpleuCreate a query using both hash key and operation on range key On tables without range key, this degrades to queryKeyídynamodb-simple0Dispatch class for NoRange/WithRange createTablefdynamodb-simpleDescritpion of dynamo tableîdynamodb-simple8Dynamo table/index name; default is the constructor nameïdynamodb-simple(Serialize data, put it into the databaseðdynamodb-simpleHReturn True if key is well-defined (i.e. no empty string, no Maybe etc.)ñdynamodb-simplejBasic instance for dynamo collection (table or index) This instances fixes the tableName and the sort keyòdynamodb-simple6Helper type to distinguish index and table collectionsgdynamodb-simple:Data collection type - with hash key or with hash+sort keyódynamodb-simple Return first field of a datatypeôdynamodb-simple#Return first 2 fields of a datatypeõdynamodb-simple-Decode hashmap to a record using generic-sop.(aèö÷bøùcdeúëìûíüfîïýþÿðñòghiõ   NoneoÅ dynamodb-simple Create ContainsTableKey instance  None .>HPUVX`y” dynamodb-simple5Periodically check state of table, until it is ACTIVE dynamodb-simple*Delete specified indices from the databasedynamodb-simple'Update table with specified new indicesdynamodb-simpleFCompare intersection of new and old indexes and find inconsistent onesdynamodb-simpleTVerbatim copy of findInconsistentIdxes, but changed to localSecondaryIndex structuredynamodb-simpledCompare indexes and return list of indices to delete and to create; indices to recreate are includeddynamodb-simple$Change streaming settings on a tabledynamodb-simpleMain table migration codeNone"#P¥ojdynamodb-simple6Configuration of TH macro for creating table instancesldynamodb-simple(Table type, primary key type, table namemdynamodb-simple/Global index type, primary key type, index namendynamodb-simpleLocal index type, index nameodynamodb-simple>Translation of haskell field names to DynamoDB attribute namespdynamodb-simpleRBuilds polymorphic lens for main table and indexes for table fields starting with '_'qdynamodb-simpleSimple table configurationrdynamodb-simpleZTranslates haskell field names to database attribute names. Strips everything up to first '_'.sdynamodb-simple<Create instances, datatypes for table, fields and instances.Example of what gets created: ÿ½data Test { _first :: Text, _second :: Text, _third :: Int } data TestIndex { u_third :: Int, i_second :: T.Text} mkTableDefs (tableConfig "" (''Test, WithRange) [(''TestIndex, NoRange)] []) deriveGenericOnly ''Test instance DynamoCollection Test WithRange IsTable ... instance DynamoTable Test WithRange tableName _ = "Test" deriveGenericOnly ''TestIndex instance DynamoCollection TestIndex NoRange IsIndex ... instance DynamoIndex TestIndex Test NoRange IsIndex indexName _ = "TestIndex" data P_First instance ColumnInfo P_First where columnName _ = "first" instance InCollection P_First Test 'NestedPath -- For every attribute instance InCollection P_Second TestIndex 'FullPath -- For every non-primary attribute first' :: Column Text TypColumn P_First first' = Column -- Polymorphic lenses class Test_lens_first a b | a -> b where first :: Functor f => (a -> f b) -> a -> f b instance Test_lens_first TestIndex Text where first = ...dynamodb-simple#Generate basic collection instancesdynamodb-simpleBBuild P_Column data, add it to instances and make column' variabletdynamodb-simpleDerive  4 and prepare column instances for nested structures.udynamodb-simpleDerive just the  : instance for structures that were already derived using s8 and you want to use them as nested structures as well.Creates: ÿ:instance DynamoEncodable Type where dEncode val = Just (attributeValue & avM .~ gdEncodeG [fieldnames] val) dDecode (Just attr) = gdDecodeG [fieldnames] (attr ^. avM) dDecode Nothing = Nothing instance InCollection column_type P_Column1 'NestedPath instance InCollection column_type P_Column2 'NestedPath ...dynamodb-simple_Creates top-leval variable as a call to a migration function with partially applied createIndexqdynamodb-simplebPrefix for table and index names; dynamodb doesn't have namespaces, this is to remedy the problem.dynamodb-simple!Table type name, primary key typedynamodb-simple.Global secondary index records, index key typedynamodb-simpleLocal secondary index recordssdynamodb-simpleName of the migration functionghijklmnopqrstusjklmnopqrtughiNone %&'.>UVX`³Èdynamodb-simple7Retry batch operation, until unprocessedItems is empty.TTODO: we should use exponential backoff; currently we use a simple 1-sec threadDelaydynamodb-simple7Retry batch operation, until unprocessedItems is empty.TTODO: we should use exponential backoff; currently we use a simple 1-sec threadDelaydynamodb-simple-Chunk list according to batch operation limitvdynamodb-simpleBatch write into the database.ƒThe batch is divided to 25-item chunks, each is sent and retried separately. If a batch fails on dynamodb exception, it is raised.ONote: On exception, the information about which items were saved is unavailablewdynamodb-simpleGet batch of items.xdynamodb-simpleBatch version of deleteItemByKey.|Note: Because the requests are chunked, the information about which items were deleted in case of exception is unavailable.vwxNone&'.>HSUVX`æúydynamodb-simpleOptions for a generic query.dynamodb-simpleGThis sets the "D.qLimit" settings for maximum number of evaluated itemsdynamodb-simpleuKey after which the evaluation starts. When paging, this should be set to qrsLastEvaluatedKey of the last operation.dynamodb-simple/Decode data, throw exception if decoding fails.zdynamodb-simple@Record for defining scan command. Use lenses to set the content.+sParallel: (Segment number, Total segments)dynamodb-simple(Segment number, TotalSegments)‚dynamodb-simple#Default settings for query options.dynamodb-simple Generate a D.Query objectƒdynamodb-simpleSame as „%, but return data in original chunks.„dynamodb-simple’Generic query function. You can query table or indexes that have a range key defined. The filter condition cannot access the hash and range keys.…dynamodb-simpleKConduit to query global indexes with no range key; in case anyone needed it†dynamodb-simplegQuery an index, fetch primary key from the result and immediately read full items from the main table.PYou cannot perform strongly consistent reads on Global indexes; if you set the { to J†, fetch from global indexes is still done as eventually consistent. Queries on local indexes are performed according to the settings.‡dynamodb-simple/Perform a simple, eventually consistent, query.ESimple to use function to query limited amount of data from database.ˆdynamodb-simpleQuery with condition‰dynamodb-simple”Fetch exactly the required count of items even when it means more calls to dynamodb. Return last evaluted key if end of data was not reached. Use  to continue reading the query. dynamodb-simple-Generic query interface for scanning/querying!dynamodb-simpleXRun command as long as Maybe cmd is Just or the resulting sequence is smaller than limitdynamodb-simple-Conduit source for running scan; the same as ‘,, but return results in chunks as they come.‘dynamodb-simple"Conduit source for running a scan.’dynamodb-simpleRFunction to call bounded scans. Tries to return exactly requested number of items.Use Ž to continue the scan."dynamodb-simple Generate a D.Query object.“dynamodb-simple*Scan table using a given filter condition. =scanCond (colAddress <!:> "Home" <.> colCity ==. "London") 10”dynamodb-simple^Conduit to do a left join on the items being sent; supposed to be used with querySourceChunks.The 'foreign key' must have an # to facilitate faster searching.•dynamodb-simple The same as ”9, but discard items that do not exist in the right table.‡dynamodb-simpleProxy type of a table to querydynamodb-simpleHash keydynamodb-simpleRange conditiondynamodb-simpleScan directiondynamodb-simple Maximum number of items to fetchˆdynamodb-simpleHash keydynamodb-simpleRange conditiondynamodb-simpleScan directiondynamodb-simple Maximum number of items to fetch‰dynamodb-simple Maximum number of items to fetch dynamodb-simple Maximum number of items to fetch’dynamodb-simple Scan settingsdynamodb-simpleRequired result countdynamodb-simpleBlist of results, lastEvalutedKey or Nothing if end of data reached”dynamodb-simpleProxy type for the right table•dynamodb-simpleProxy type for the right tableyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•None.>Mñ÷ –dynamodb-simpleAn action for  functions.—dynamodb-simpleNGenerate an action expression and associated structures from a list of actions˜dynamodb-simple"Add a number to a saved attribute.™dynamodb-simple)Subtract a number from a saved attribute.šdynamodb-simple Set an attribute to a new value.›dynamodb-simple.Set on a Maybe type, if it was not set before.œdynamodb-simple'Append a new value to an end of a list.dynamodb-simple'Insert a value to a beginning of a listždynamodb-simpleAdd a new value to a set.Ÿdynamodb-simpleRemove a value from a set. dynamodb-simpleDelete n-th list of an item.¡dynamodb-simpleDelete a key from a map. –—˜™š›œžŸ ¡ –˜™š›œžŸ ¡—˜4™4š4 BSD-stylepalkovsky.ondrej@gmail.com experimentalportableNone .>HUVX`X ¨dynamodb-simple_Write item into the database; overwrite any previously existing item with the same primary key.©dynamodb-simple>Write item into the database only if it doesn't already exist.ªdynamodb-simplekRead item from the database; primary key is either a hash key or (hash,range) tuple depending on the table.«dynamodb-simple<Delete item from the database by specifying the primary key.¬dynamodb-simple…Delete item from the database by specifying the primary key and a condition. Throws AWS exception if the condition does not succeed.$dynamodb-simpleƒGenerate update item object; automatically adds condition for existence of primary key, so that only existing objects are modified­dynamodb-simpleUpdate item in a table. =updateItem (Proxy :: Proxy Test) (12, "2") (colCount +=. 100)®dynamodb-simpleAUpdate item in a database, return an updated version of the item.¯dynamodb-simple4Update item in a table while specifying a condition.°dynamodb-simpleDelete a table from DynamoDB.±dynamodb-simple"Extract primary key from a record.ÀYou can use this on both main table or on index tables if they contain the primary key from the main table. Table key is always projected to indexes anyway, so just define it in every index.<EFGHIJMNOPabcdefvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•¨©ª«¬­®¯°±<HIJEFGMNOPªwy‚{|}~€‰‡ˆ„ƒ…†z‹ŠŒŽ’‘“”•¨v©®­¯«¬x°±fbcaed% !"#$%&'())*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST U V W X Y Z [ \ ] ^ _ `abcdefghijklmnop q r s t u v w x yzz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–— ˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÒÓÕ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì ] í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ                                  ! " # $%&'()*+,-./01234567.dynamodb-simple-0.6.0.2-CnySV7HW69I31BGrKCKC1aDatabase.DynamoDB.TypesDatabase.DynamoDBDatabase.DynamoDB.FilterDatabase.DynamoDB.THDatabase.DynamoDB.UpdateControl.Monad.SupplyDatabase.DynamoDB.THLensDatabase.DynamoDB.THConvertqueryDatabase.DynamoDB.InternalDatabase.DynamoDB.ClassDatabase.DynamoDB.THContainsDatabase.DynamoDB.MigrationDatabase.DynamoDB.BatchRequestDatabase.DynamoDB.QueryRequestupdateItemByKey RangeOper RangeEquals RangeLessThanRangeLessThanERangeGreaterThanRangeGreaterThanE RangeBetweenRangeBeginsWithIsTexttoTextfromTextIsNumberDynamoEncodabledEncodedDecode dDecodeEither dIsMissing DynamoScalar scalarEncode scalarDecode ScalarValueScSScNScBDynamoExceptiondType dScalarEncode$fExceptionDynamoException $fScalarAutoB $fScalarAutoN $fScalarAutoS$fDynamoScalarSUUID$fDynamoScalarBByteString$fDynamoScalarSText$fDynamoScalarNDouble$fDynamoScalarNScientific$fDynamoScalarvTagged$fDynamoScalarNWord$fDynamoScalarNInt64$fDynamoScalarNInt32$fDynamoScalarNInt16$fDynamoScalarNInt$fDynamoScalarNInteger$fDynamoEncodableValue$fDynamoEncodableTagged$fDynamoEncodable[]$fDynamoEncodableSet$fDynamoEncodableMaybe$fDynamoEncodableUUID$fDynamoEncodableByteString$fDynamoEncodableText$fDynamoEncodableBool$fDynamoEncodableDouble$fDynamoEncodableInt64$fDynamoEncodableInt32$fDynamoEncodableInt16$fDynamoEncodableWord$fDynamoEncodableInt$fDynamoEncodableInteger$fDynamoEncodableScientific$fIsNumberTagged$fIsNumberInteger$fIsNumberDouble $fIsNumberInt$fIsTextTagged $fIsTextText$fDynamoEncodableHashMap$fShowDynamoException DirectionForwardBackward Consistency EventuallyStronglyFilterConditionNotColumn<.>betweenvalIn attrExists attrMissing beginsWithcontains setContainssize&&.||.==./=.<=.<.>.>=.ContainsTableKey DynamoIndex PrimaryKey TableScanCanQuery DynamoTable RangeTypeNoRange WithRange TableConfig tableSetup globalIndexes localIndexestranslateField buildLens tableConfigdefaultTranslate mkTableDefsderiveCollectionderiveEncodable putItemBatch getItemBatchdeleteItemBatchByKey QueryOptsScanOptsqConsistentRead qDirectionqFilterConditionqHashKeyqLimitqRangeCondition qStartKey queryOptsquerySourceChunks querySourcequerySourceByKeyqueryOverIndex querySimple queryCondsConsistentReadsFilterConditionsLimit sParallel sStartKeyscanOptsscanSourceChunks scanSourcescanscanCondleftJoin innerJoinAction dumpActions+=.-=.=. setIfNothingappendprependadddelete delListItem delHashKey$fActionClassRemove$fActionClassDelete$fActionClassAdd$fActionClassSet$fSemigroupAction$fMonoidActionputItem insertItemgetItemdeleteItemByKeydeleteItemCondByKeyupdateItemByKey_updateItemCond_ deleteTabletableKeySupplySupplyTsupplies MonadSupplypeeksupply exhausted evalSupplyT evalSupply runSupplyT runSupplycreatePolyLenses getFieldNameswhenJustsaycreateTableConversions4unordered-containers-0.2.10.0-LgoTL3wbBEY5bZIDJiyxW4Data.HashMap.BaseHashMapbase GHC.MaybeNothingMaybeUnMaybe ColumnInfo InCollection IntraColNamemkColumn dumpCondition consistencyL AttrMissing AttrExistsOrIn ComparisonContainsBetween BeginsWithAndNameGen columnNamePathTypeFullPath NestedPath IntraIndex IntraNameSize ColumnTypeTypSize TypColumnnameGen nameGenPathrangeKey rangeStartrangeEnd rangeOper rangeData dTableKey PrimaryKey' qsTableName qTableName dQueryKey TableCreate tableNamedPutItem dKeyIsDefinedDynamoCollection TableType gdFirstField gdTwoFields gsDecodeG IndexCreatecreateGlobalIndex indexName indexIsLocal qIndexNamedQueryKeyToAttr createTable HasPrimaryKey dItemToKey dKeyToAttr dAttrToKey allFieldNames primaryFields dGsDecodeIsTableIsIndexgsEncode gsEncodeGgsDecodecreateLocalIndex defaultScancreateContainsTableKeywaitUntilTableActive deleteIndices createIndicesfindInconsistentIdxesfindInconsistentLocIdxescompareIndexes changeStream tryMigration runMigrationgenBaseCollection buildColDatamkMigrationFuncretryWriteBatchretryReadBatch chunkBatch_qLimit _qStartKey rsDecoder _sParallelqueryCmd boundedFetch unfoldLimitscanCmdghc-prim GHC.ClassesOrd dUpdateItem