A      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Nonec>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)5Reify name and return list of record fields with typeNone]JCreate 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%&'-7;<=>?AFNVd,?Operation on range key for .fClass to limit certain operations to text-like only in queries. Members of this class can be keys to . 'Class to limit +=. and -=. for updates. >Typeclass showing that this datatype can be saved to DynamoDB. Encode data. Return  if attribute should be omitted.Decode data. Return  on parsing error, gets 7 on input if the attribute was missing in the database.8Decode 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 errorsAid 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 keysXTypeclass 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 txt)Scalars must have total encoding function#Datatype for encoding scalar values2Exceptions thrown by some dynamodb-simple actions.#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.$Double as a primary key isn't generally a good thing as equality on double is sometimes a little dodgy. Use scientific instead.%Helper for tagged values,LPartial encoding/decoding Aeson values. Empty strings get converted to NULL..(DynamoDB cannot represent empty items; [ a] will lose Nothings.0 ( a) will not work well; it will join the value in the database.       None&'-;<=>?FNTV=+Allow skipping over maybe types when using .EQuery directionH:Parameter for queries involving read consistency settings.KBFilter condition. Use with scan, query, update and delete methods.(Filtering on primary key is not allowed.LNegate condition:Class to get a column name from a Type specifying a column7Signifies that the column is present in the table/index?Internal representation of a part of path in a nested structureM-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%Smart constructor for Column datatypeDReturn filter expression, attribute name map and attribute value mapLens to help set consistency.N*Combine attributes from nested structures. address' <.> street'O!Access an index in a nested list. users' <!> 0 <.> name'P!Access a key in a nested hashmap. !phones' <!:> "mobile" <.> number'/EGFHJIKLMNOPEFGHIJK LMN7O8P8None &'-<VH Q Numeric/string range comparison.R6a IN (b, c, d); the list may contain up to 100 values.SCheck existence of attribute.T$Checks non-existence of an attributeUComparison for text columns.V,CONTAINS condition for text-like attributes.WCONTAINS condition for sets.X/Size (i.e. number of bytes) of saved attribute.YAND for combining conditions.ZOR for combining conditions[RTests for equality. Automatically adjusts query to account for missing attributes.:Note: checks against empty values esentially translate to T.\ a /= b === Not (a == b)KLQRSTUVWXYZ[\]^_`KLYZ[\`_]^STUVWRQXY3Z3[4\4]4^4_4`4 None&',-7;<=>?AFQSTV\:a>Class for indexes that contain primary key of the parent table3Extract table primary key from an item, if possibleb+Class representing a Global Secondary Index Parameter type for queryKeyRangecIType family that returns a primary key of a table/index depending on the g parameter.d,Class for tables/indexes that can be scanned Return table name and index namee,Class for tables/indexes that can be queried Return table name and index nameuCreate a query using both hash key and operation on range key On tables without range key, this degrades to queryKey0Dispatch class for NoRange/WithRange createTablefDescritpion of dynamo table8Dynamo table/index name; default is the constructor name(Serialize data, put it into the databaseHReturn True if key is well-defined (i.e. no empty string, no Maybe etc.)jBasic instance for dynamo collection (table or index) This instances fixes the tableName and the sort key6Helper type to distinguish index and table collectionsg:Data collection type - with hash key or with hash+sort key Return first field of a datatype#Return first 2 fields of a datatype-Decode hashmap to a record using generic-sop.(abcdefghi abdefghi None^F Create ContainsTableKey instance None -<FNSTV^f'5Periodically check state of table, until it is ACTIVE*Delete specified indices from the database'Update table with specified new indices FCompare intersection of new and old indexes and find inconsistent ones TVerbatim copy of findInconsistentIdxes, but changed to localSecondaryIndex structure dCompare indexes and return list of indices to delete and to create; indices to recreate are included $Change streaming settings on a table Main table migration codeNone"#Njj6Configuration of TH macro for creating table instancesl(Table type, primary key type, table namem/Global index type, primary key type, index namenLocal index type, index nameo>Translation of haskell field names to DynamoDB attribute namespRBuilds polymorphic lens for main table and indexes for table fields starting with '_'qSimple table configurationrZTranslates haskell field names to database attribute names. Strips everything up to first '_'.s<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 = ...#Generate basic collection instancesBBuild P_Column data, add it to instances and make column' variabletDerive  4 and prepare column instances for nested structures.uDerive 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 ..._Creates top-leval variable as a call to a migration function with partially applied createIndexqbPrefix for table and index names; dynamodb doesn't have namespaces, this is to remedy the problem.!Table type name, primary key type.Global secondary index records, index key typeLocal secondary index recordssName of the migration functionghijklmnopqrstusjklmnopqrtughijklmnop None %&'-<STV^n7Retry batch operation, until unprocessedItems is empty.TTODO: we should use exponential backoff; currently we use a simple 1-sec threadDelay7Retry batch operation, until unprocessedItems is empty.TTODO: we should use exponential backoff; currently we use a simple 1-sec threadDelay-Chunk list according to batch operation limitvBatch 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 unavailablewGet batch of items.xBatch version of deleteItemByKey.|Note: Because the requests are chunked, the information about which items were deleted in case of exception is unavailable.vwxNone&'-<FQSTV^yOptions for a generic query.GThis sets the "D.qLimit" settings for maximum number of evaluated itemsuKey after which the evaluation starts. When paging, this should be set to qrsLastEvaluatedKey of the last operation./Decode data, throw exception if decoding fails.z@Record for defining scan command. Use lenses to set the content.+sParallel: (Segment number, Total segments)(Segment number, TotalSegments)#Default settings for query options. Generate a D.Query objectSame as %, but return data in original chunks.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.KConduit to query global indexes with no range key; in case anyone needed itgQuery 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./Perform a simple, eventually consistent, query.ESimple to use function to query limited amount of data from database.Query with conditionFetch 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.-Generic query interface for scanning/queryingXRun command as long as Maybe cmd is Just or the resulting sequence is smaller than limit-Conduit source for running scan; the same as ,, but return results in chunks as they come."Conduit source for running a scan.RFunction to call bounded scans. Tries to return exactly requested number of items.Use  to continue the scan. Generate a D.Query object.*Scan table using a given filter condition. =scanCond (colAddress <!:> "Home" <.> colCity ==. "London") 10^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. The same as 9, but discard items that do not exist in the right table.Proxy type of a table to queryHash keyRange conditionScan direction Maximum number of items to fetchHash keyRange conditionScan direction Maximum number of items to fetch Maximum number of items to fetch Maximum number of items to fetch Scan settingsRequired result countBlist of results, lastEvalutedKey or Nothing if end of data reachedProxy type for the right tableProxy type for the right tableyz{|}~y !"#z$%&'(None-<KK An action for  functions.NGenerate an action expression and associated structures from a list of actions"Add a number to a saved attribute.)Subtract a number from a saved attribute. Set an attribute to a new value..Set on a Maybe type, if it was not set before.'Append a new value to an end of a list.'Insert a value to a beginning of a listAdd a new value to a set.Remove a value from a set.Delete n-th list of an item.Delete a key from a map. )*+,-./0123456789:;444 BSD-stylepalkovsky.ondrej@gmail.com experimentalportableNone -<FSTV^[ _Write item into the database; overwrite any previously existing item with the same primary key.>Write item into the database only if it doesn't already exist.kRead item from the database; primary key is either a hash key or (hash,range) tuple depending on the table.<Delete item from the database by specifying the primary key.Delete item from the database by specifying the primary key and a condition. Throws AWS exception if the condition does not succeed.<Generate update item object; automatically adds condition for existence of primary key, so that only existing objects are modifiedUpdate item in a table. =updateItem (Proxy :: Proxy Test) (12, "2") (colCount +=. 100)AUpdate item in a database, return an updated version of the item.4Update item in a table while specifying a condition.Delete a table from DynamoDB."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{|}~<HIJEFGMNOPwy{|}~zvxfbcaed= !"#$%&'(()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRS T U V W X Y Z [ \ ] ^ _`abcdefghijklmno p q r s t u v w xyyz{|}~                     \                                        ! " #$%&'()*+,-./0123456789:;;<<==>>?@ABCDEFG.dynamodb-simple-0.6.0.0-Gd2LpuG1ymuIuE2kaY0TJ2Database.DynamoDB.TypesDatabase.DynamoDBDatabase.DynamoDB.FilterDatabase.DynamoDB.THDatabase.DynamoDB.UpdateDatabase.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_ deleteTabletableKeycreatePolyLenses getFieldNameswhenJustsaycreateTableConversions3unordered-containers-0.2.8.0-3iSQJVS3Sio885UUC852ojData.HashMap.BaseHashMapbaseGHC.BaseNothingMaybe ScalarAutodTypeV dSetEncodeV dSetDecodeVUnMaybe ColumnInfo InCollection IntraColNamemkColumn dumpCondition consistencyL AttrMissing AttrExistsOr ComparisonInContainsBetween 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 defaultScan qsIndexNamecreateContainsTableKeywaitUntilTableActive deleteIndices createIndicesfindInconsistentIdxesfindInconsistentLocIdxescompareIndexes changeStream tryMigration runMigrationgenBaseCollection buildColDatamkMigrationFuncretryWriteBatchretryReadBatch chunkBatch_qLimit _qStartKey rsDecoder _sParallelqueryCmd boundedFetch unfoldLimitscanCmdghc-prim GHC.ClassesOrd _qHashKey_qRangeCondition_qFilterCondition_qConsistentRead _qDirection_sFilterCondition_sConsistentRead_sLimit _sStartKey ActionClass dumpActionasActionRemoveDeleteAddSet ActionValueValAttr IfNotExists ListAppend ListPrependPlusMinus dUpdateItem