h?      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe5:Low-level representation of replies from the Redis server.    None!"0Connection socket-handle.!Reply thunks for unsent requests.KReply thunks for requests "in the pipeline". Refers to the same list as , but can have an offset.DNumber of pending replies and thus the difference length between  and <. length connPending - pendingCount = length connRepliesOWrite the request to the socket output buffer, without actually sending. The  is !ed when reading replies from the .3Take a reply-thunk from the list of future replies.2Send a request and receive the corresponding replyA list of all future  s of the .CThe spine of the list can be evaluated without forcing the replies.Evaluating/forcing a  from the list will $ the reading and parsing from the n. To ensure correct ordering, each Reply first evaluates (and thus reads from the network) the previous one.F only evaluates it's result once, making this function thread-safe. @ as implemented by GHC is also threadsafe, it is safe to call 8 here. The list constructor '(:)' must be called from within: unsafeInterleaveIO, to keep the replies in correct order.     None59;               None !"9;<=?I .Information for connnecting to a Redis server.!It is recommended to not use the ) data constructor directly. Instead use ( and update it with record syntax. For example to connect to a password protected Redis server running on localhost and listening to the default port: ^myConnectInfo :: ConnectInfo myConnectInfo = defaultConnectInfo {connectAuth = Just "secret"} 0When the server is protected by a password, set  to @ the password. Each connection will then authenticate by the * command.Each connection will +# the database with the given index. RMaximum number of connections to keep open. The smallest acceptable value is 1.!tAmount of time for which an unused connection is kept open. The smallest acceptable value is 0.5 seconds. If the timeoutK value in your redis.conf file is non-zero, it should be larger than !."FA threadsafe pool of network connections to a Redis server. Use the ) function to create one.$:This class captures the following behaviour: In a context mG, a command will return it's result wrapped in a "container" of type f.XPlease refer to the Command Type Signatures section of this page for more information.%EContext for normal command execution, outside of transactions. Use & to run actions of this type..In this context, each result is wrapped in an 8 to account for the possibility of Redis returning an  reply.&7Interact with a Redis datastore specified by the given ". Each call of &% takes a network connection from the " pool and runs the given % action. Calls to &A may thus block while all connections from the pool are in use.Internal version of & that does not depend on the "= abstraction. Used to run the AUTH command when connecting.'' can be used to implement commands from experimental versions of Redis. An example of how to implement a command is given below. <-- |Redis DEBUG OBJECT command debugObject :: ByteString -> % (Either  ByteString) debugObject key = ' ["DEBUG", "OBJECT", key] (#Default information for connecting: ` connectHost = "localhost" connectPort = PortNumber 6379 -- Redis default port connectAuth = Nothing -- No password connectDatabase = 0 -- SELECT database 0 connectMaxConnections = 50 -- Up to 50 connections connectMaxIdleTime = 30 -- Keep open for 30 seconds )Opens a "- to a Redis server designated by the given .  !"#$ !"#%$&%&''()*password+index() !"#$%&&''()*+ !"#$ !"#%$&%&''()*+()None!":3Options for the W command.: A single entry from the slowlog.<9A unique progressive identifier for every slow log entry.==The unix timestamp at which the logged command was processed.>=The amount of time needed for its execution, in microseconds.?The command and it's arguments.URedis default 31. Equivalent to omitting all optional parameters.  SortOpts { sortBy = Nothing -- omit the BY option , sortLimit = (0,-1) -- return entire collection , sortGet = [] -- omit the GET option , sortOrder = Asc -- sort in ascending order , sortAlpha = False -- sort numerically, not lexicographically } <,-./0123456789:;<=>?@keyAkeyBkeyCkeypivotvalueDkeypivotvalueEkeyFcntGHIkeystartstopJkeystartstopKkeystartstopLkeystartstopMkeyminmaxNkeyminmaxOkeyminmaxoffsetcountPkeyminmaxoffsetcountQkeymaxminRkeymaxminSkeymaxminoffsetcountTkeymaxminoffsetcountUVkey destinationWkey*key destinationX destinationkeysY destination weighted keysZ destinationkeys[ destination weighted keys+cmd destinationkeysweights\scriptkeysargs]scriptkeysargs^key_keystartend`destkeysrckeysadestkeysrckeysbdestkeysrckeyscdestkeysrckey, operationkeys-;,-/.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW*XYZ[+\]^_`abc,,,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW*XYZ[+\]^_`abc,-None!"9:;Cj'Encapsulates subscription changes. Use l, m, n, o or .5 to construct a value. Combine values by using the / interface, i.e. 0 and 1.2While in PubSub mode, we keep track of the number of current subscriptions (as reported by Redis replies) and the number of messages we expect to receive after a SUBSCRIBE or PSUBSCRIBE command. We can safely leave the PubSub mode when both these numbers are zero.kPost a message to a channel ( http://redis.io/commands/publish).l7Listen for messages published to the given channels ( "http://redis.io/commands/subscribe).m<Stop listening for messages posted to the given channels ( $http://redis.io/commands/unsubscribe).nJListen for messages published to channels matching the given patterns ( #http://redis.io/commands/psubscribe).oOStop listening for messages posted to channels matching the given patterns ( %http://redis.io/commands/punsubscribe).pListens to published messages on subscribed channels and channels matching the subscribed patterns. For documentation on the semantics of Redis Pub/Sub see  http://redis.io/topics/pubsub.wThe given callback function is called for each received message. Subscription changes are triggered by the returned j=. To keep subscriptions unchanged, the callback can return ..6Example: Subscribe to the "news" channel indefinitely. w pubSub (subscribe ["news"]) $ \msg -> do putStrLn $ "Message from " ++ show (msgChannel msg) return mempty :Example: Receive a single message from the "chat" channel.  pubSub (subscribe ["chat"]) $ \msg -> do putStrLn $ "Message from " ++ show (msgChannel msg) return $ unsubscribe ["chat"] 23456defghi789:;<=j>?@ABCDEF2GHIJKLMkchannelmessagelchannelmchannelnpatternopatternpInitial subscriptions.Callback function.NOPQRSTUV defghijklmnop3456defghigh789:;<=j>?@ABCDEF2GHIJKLMklmnopNOPQRSTUVNone59;<=I q Result of a y transaction.rLTransaction completed successfully. The wrapped value corresponds to the u value returned from the y argument action.s&Transaction aborted due to an earlier w command.t)At least one of the commands returned an  reply.uA u_ value represents the result of a command inside a transaction. It is a proxy object for the actual? result, which will only be available after returning from a y transaction.u( values are composable by utilizing the W, X or Y interfaces.v7Command-context inside of MULTI/EXEC transactions. Use y to run actions of this type.In the v context, all commands return a u' value. It is a proxy object for the actualH result, which will only be available after finishing the transaction.wGWatch the given keys to determine execution of the MULTI/EXEC block ( http://redis.io/commands/watch).xForget about all watched keys ( http://redis.io/commands/unwatch).yaRun commands inside a transaction. For documentation on the semantics of Redis transaction see  #http://redis.io/topics/transactions.SInside the transaction block, command functions return their result wrapped in a u. The u` result is a proxy object for the actual command's result, which will only be available after EXECing the transaction.Example usage (note how u 's X; instance is used to combine the two individual results): Y runRedis conn $ do set "hello" "hello" set "world" "world" helloworld <- y $ do hello <- get "hello" world <- get "world" return $ (,) <$> hello <*> world liftIO (print helloworld) qrstuZv[\wkeyxy]^_`abcd qrstuvwxyqrstuZv[\wxy]^_`abcd None:rzkey{keyvalue|key}keymember~keyminmaxkeykeyhostportkeyvaluekeykeysource destinationkeytimeoutkey incrementmemberkeykey fieldValuekeykeyvaluekeystartstopkeymemberkeyindexkeyvaluekeyvaluesource destinationmemberkeymemberkeykeyfieldkey incrementkeyoffsetvaluekey incrementkeykeykey destinationkeykey parametervaluekey timeToLiveserializedValuekeykeysecondskeykey scoreMemberkey millisecondskeynewkeydestkey sourcekeykeycountvaluekeykeykeystartend destinationkeykeyminmaxscriptkeyvaluekeypattern parameterkeyvaluekeyfieldvaluekeyValuekeysecondsvaluekey millisecondsvaluekeyscript destinationkeykeykeykeyvaluekeykeyfieldvaluesource destinationtimeoutkeymemberkeyoffsetvaluekeykeyfield incrementkeyfield incrementkeykeynewkeykeymemberkeyfieldkeykeyfieldkeystartstopkey decrementkeykeyvaluekeykeyfieldkeymillisecondsTimestampkeystartstopkeykeyindexvaluekey timestampkeydbkeyoffsetkeyValuekeytimeoutkeymembermessagekeymemberhostportkey destinationDbtimeout *+,-/.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcz{|}~rz{|}~None  !"#$%&'()*+,-/.0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~%&$#") !(*+@BA|3456789U012WVz ECD\]:;<=>?FGH,-./Z[IJMNOP}~KLQRSTXY^_`abc{wxyuqrstvkpdefghighjlmno'  e      !"#!$%&'()*+,-./0123456789:;<=>??@ABCDEEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnnopqrstuvwxyz{|}~     . 5 !"#$%&'()*+,-./10 123456%7%8%9%:;<=>?@ABCDCEsFGHIJKLM;NOPQRSTUVWXYZ[\%]%^%_~`abcdefghi"hedis-0.7.2-FbgYrFPmECgB6psLhqvNSzDatabase.RedisDatabase.Redis.Protocol!Database.Redis.ProtocolPipeliningDatabase.Redis.TypesDatabase.Redis.CoreDatabase.Redis.ManualCommandsDatabase.Redis.PubSubDatabase.Redis.TransactionsDatabase.Redis.Commands&network-2.6.3.1-G4Up1CPKbp7DeFsnywOnGGNetwork UnixSocket PortNumberServicePortIDNetwork.SocketHostNameReply SingleLineErrorIntegerBulk MultiBulkConnectionLostExceptionConnectionLost RedisTypeNoneStringHashListSetZSetStatusOkPong RedisResultdecode ConnectInfoConnInfo connectHost connectPort connectAuthconnectDatabaseconnectMaxConnectionsconnectMaxIdleTime Connection MonadRedisRedisCtxRedisrunRedis sendRequestdefaultConnectInfoconnectauthselect AggregateSumMinMax SortOrderAscDescSortOptssortBy sortLimitsortGet sortOrder sortAlphaSlowlog slowlogIdslowlogTimestamp slowlogMicros slowlogCmdobjectRefcountobjectIdletimeobjectEncoding linsertBefore linsertAftergetType slowlogGet slowlogLen slowlogResetzrangezrangeWithscores zrevrangezrevrangeWithscores zrangebyscorezrangebyscoreWithscoreszrangebyscoreLimitzrangebyscoreWithscoresLimitzrevrangebyscorezrevrangebyscoreWithscoreszrevrangebyscoreLimitzrevrangebyscoreWithscoresLimitdefaultSortOpts sortStoresort zunionstorezunionstoreWeights zinterstorezinterstoreWeightsevalevalshabitcount bitcountRangebitopAndbitopOrbitopXorbitopNotMessagePMessage msgChannel msgMessage msgPatternPubSubpublish subscribe unsubscribe psubscribe punsubscribepubSubTxResult TxSuccess TxAbortedTxErrorQueuedRedisTxwatchunwatch multiExecttlsetnxpttlzrankzremrangebyscorehkeysspopslaveofrpushx debugObjectbgsavehlen rpoplpushbrpop bgrewriteaofzincrbyhgetallhmsetsinterpfaddzremrangebyrankflushdbsaddlindexsetlpushsmovezscoreconfigResetstatpfcounthdel incrbyfloatsetbitflushallincrbytimesmembersexistssunion sinterstorepinghvals configSetrestore scriptFlushdbsizelpopexpiremgetlastsavezaddpexpirerenamenxpfmergelremsdiffgetgetrange sdiffstorezcount scriptLoadgetsetdumpkeys configGetrpush randomkeyhsetnxmsetsetexpsetexscard scriptExists sunionstorepersiststrlenlpushx srandmemberhset brpoplpushzrevrank scriptKillsetrangedel hincrbyfloathincrbyrpoprenamezremhexistsdecrhmgetlrangedecrbyllenappendincrhget pexpireatltriminfozcardlsetexpireatsavemovegetbitmsetnxquitblpopsremecho sismembermigrate renderRequest renderArgshowBScrlfreply singleLineerrorintegerbulk multiBulk $fNFDataReply connHandle connReplies connPendingconnPendingCntsendbaseGHC.IO.Handle.TypesHandle GHC.IO.HandlehFlushrecvrequestconnGetReplies GHC.IO.UnsafeunsafeInterleaveIOConn disconnectioErrorToConnLost errConnClosed"$fExceptionConnectionLostExceptionRedisArgencode$fRedisResult[]$fRedisResult(,)$fRedisResult[]0$fRedisResultMaybe$fRedisResultBool$fRedisResultRedisType$fRedisResultStatus$fRedisResultDouble$fRedisResultInteger$fRedisResultByteString$fRedisResultReply$fNFDataStatus$fRedisArgDouble$fRedisArgInteger$fRedisArgByteStringGHC.BaseJust Data.EitherEitherrunRedisInternal liftRedis returnDecodeRedisEnvEnvenvConn envLastReply setLastReply$fMonadRedisRedis$fRedisCtxRedisEither sortInternalzstoreInternalbitop$fRedisResultSlowlogmemptyMonoidmappendmconcat PubSubState PubSubReply Subscribed UnsubscribedMsgCommandredisCmd updatePendingCmd DoNothingchangessubsunsubspsubspunsubsPatternChannel Unsubscribe SubscribesubCntpending modifyPending putSubCntsendCmd plusChangeCnt decodeMsgerrMsg $fCommandCmd $fCommandCmd0 $fCommandCmd1 $fCommandCmd2 $fMonoidCmd $fMonoidCmd0$fMonoidPubSubFunctor ApplicativeMonad runRedisTxmultiexec$fNFDataTxResult $fMonadQueued$fApplicativeQueued$fFunctorQueued$fRedisCtxRedisTxQueued$fMonadRedisRedisTx