ކ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ None0:Low-level representation of replies from the Redis server.   None+Connection 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.                 None035   None 3579C.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.(Deconstruct Redis constructor.( and )= can be used to define instances for arbitrary typeclasses.~WARNING! These functions are considered internal and no guarantee is given at this point that they will not break in future.)Reconstruct Redis constructor."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-. !"#$%$&'()+,*+,-. !"##$%$%&'(&)'()"*+,*+,-.-.None46Options for the Z 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.A=The amount of time needed for its execution, in microseconds.BThe command and it's arguments.XRedis default 61. 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:;<=>?@ABCkeyDkeyEkeyFkeypivotvalueGkeypivotvalueHkeyIcntJKLkeystartstopMkeystartstopNkeystartstopOkeystartstopPkeyminmaxQkeyminmaxRkeyminmaxoffsetcountSkeyminmaxoffsetcountTkeymaxminUkeymaxminVkeymaxminoffsetcountWkeymaxminoffsetcountXYkey destinationZkey/key destination[ destinationkeys\ destination weighted keys] destinationkeys^ destination weighted keys0cmd destinationkeysweights_scriptkeysargs`scriptkeysargsakeybkeystartendcdestkeysrckeysddestkeysrckeysedestkeysrckeysfdestkeysrckey1 operationkeys2;/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ/[\]^0_`abcdef1,/0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ/[\]^0_`abcdef12None345=m'Encapsulates subscription changes. Use o, p, q, r or 35 to construct a value. Combine values by using the 4 interface, i.e. 5 and 6.7While 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.nPost a message to a channel ( http://redis.io/commands/publish).o7Listen for messages published to the given channels ( "http://redis.io/commands/subscribe).p<Stop listening for messages posted to the given channels ( $http://redis.io/commands/unsubscribe).qJListen for messages published to channels matching the given patterns ( #http://redis.io/commands/psubscribe).rOStop listening for messages posted to channels matching the given patterns ( %http://redis.io/commands/punsubscribe).sListens 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 m=. To keep subscriptions unchanged, the callback can return 3.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"] RIt should be noted that Redis Pub/Sub by its nature is asynchronous so returning p does not mean that callback won't be able to receive any further messages. And to guarantee that you won't won't process messages after unsubscription and won't unsubscribe from the same channel more than once you need to use IORef or something similar289:;ghijkl<=>?@ABmCDEFGHIJK7LMNOPQRnchannelmessageochannelpchannelqpatternrpatternsInitial subscriptions.Callback function.STUVWXYZ[ ghijklmnopqrs89:;ghkijlij<=>?@ABmCDEFGHIJK7LMNOPQRnopqrsSTUVWXYZ[None0357C t Result of a | transaction.uLTransaction completed successfully. The wrapped value corresponds to the x value returned from the | argument action.v&Transaction aborted due to an earlier z command.w)At least one of the commands returned an  reply.xA x_ 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 | transaction.x( values are composable by utilizing the \, ] or ^ interfaces.y7Command-context inside of MULTI/EXEC transactions. Use | to run actions of this type.In the y context, all commands return a x' value. It is a proxy object for the actualH result, which will only be available after finishing the transaction.zGWatch the given keys to determine execution of the MULTI/EXEC block ( http://redis.io/commands/watch).{Forget about all watched keys ( http://redis.io/commands/unwatch).|aRun 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 x. The x` result is a proxy object for the actual command's result, which will only be available after EXECing the transaction.Example usage (note how x 's ]; instance is used to combine the two individual results): Y runRedis conn $ do set "hello" "hello" set "world" "world" helloworld <- | $ do hello <- get "hello" world <- get "world" return $ (,) <$> hello <*> world liftIO (print helloworld) tuvwx_y`azkey{|bcdefghi tuvwxyz{|tuvwx_y`az{|bcdefghi None4r}key~keyvaluekeykeymemberkeyminmaxkeykeyhostportkeyvaluekeykeysource destinationkeytimeoutkey incrementmemberkeykey fieldValuekeykeyvaluekeystartstopkeymemberkeyindexkeyvaluekeyvaluesource destinationmemberkeymemberkeykeyfieldkey incrementkeyoffsetvaluekey incrementkeykeykey destinationkeykey parametervaluekey timeToLiveserializedValuekeykeysecondskeykey scoreMemberkey millisecondskeynewkeydestkey sourcekeykeycountvaluekeykeykeystartend destinationkeykeyminmaxscriptkeyvaluekeypattern parameterkeyvaluekeyfieldvaluekeyValuekeysecondsvaluekey millisecondsvaluekeyscript destinationkeykeykeykeyvaluekeykeyfieldvaluesource destinationtimeoutkeymemberkeyoffsetvaluekeykeyfield incrementkeyfield incrementkeykeynewkeykeymemberkeyfieldkeykeyfieldkeystartstopkey decrementkeykeyvaluekeykeyfieldkeymillisecondsTimestampkeystartstopkeykeyindexvaluekey timestampkeydbkeyoffsetkeyValuekeytimeoutkeymembermessagekeymemberhostportkey destinationDbtimeout -./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdef}~r}~None  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~&'()%#$", !+-.CED6789:;<X345ZY} HFG_`=>?@ABIJK/012]^LMPQRSNOTUVW[\abcdef~z{|xtuvwynsghkijlijmopqr*  j      !"#!$%&'()*+,-./0123456789:;<=>?@ABBCDEFGHHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqqrstuvwxyz{|}~       . 8 !"#$%&'()* +, -./0123425 6789:; +< += +> +?@ABCDEFGHIHJvKLMNOPQR@STUVWXYZ[\]^_`a +b +c +defghijklmhedis_Cf3JIoOSHQ07ermd3T9n1LDatabase.RedisDatabase.Redis.Protocol!Database.Redis.ProtocolPipeliningDatabase.Redis.TypesDatabase.Redis.CoreDatabase.Redis.ManualCommandsDatabase.Redis.PubSubDatabase.Redis.TransactionsDatabase.Redis.Commandsnetwo_A6pE0dLgMEk2GtUa1JtTJQNetwork UnixSocket PortNumberServicePortIDNetwork.SocketHostNameReply SingleLineErrorIntegerBulk MultiBulkConnectionLostExceptionConnectionLost RedisTypeNoneStringHashListSetZSetStatusOkPong RedisResultdecode ConnectInfoConnInfo connectHost connectPort connectAuthconnectDatabaseconnectMaxConnectionsconnectMaxIdleTime Connection MonadRedis liftRedisRedisCtxRedisrunRedisunRedisreRedis sendRequestdefaultConnectInfoconnectauthselect AggregateSumMinMax SortOrderAscDescSortOptssortBy sortLimitsortGet sortOrder sortAlphaSlowlog slowlogIdslowlogTimestamp slowlogMicros slowlogCmdobjectRefcountobjectIdletimeobjectEncoding linsertBefore linsertAftergetType slowlogGet slowlogLen slowlogResetzrangezrangeWithscores zrevrangezrevrangeWithscores zrangebyscorezrangebyscoreWithscoreszrangebyscoreLimitzrangebyscoreWithscoresLimitzrevrangebyscorezrevrangebyscoreWithscoreszrevrangebyscoreLimitzrevrangebyscoreWithscoresLimitdefaultSortOpts sortStoresort zunionstorezunionstoreWeights zinterstorezinterstoreWeightsevalevalshabitcount bitcountRangebitopAndbitopOrbitopXorbitopNotMessage msgChannel msgMessagePMessage 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 renderArgshowBScrlfreplystringerrorintegerbulkmultiintegrallineeol $fNFDataReply connHandle connReplies connPendingconnPendingCntsendbaseGHC.IO.Handle.TypesHandle GHC.IO.HandlehFlushrecvrequestconnGetRepliesGHC.IOunsafeInterleaveIOConn disconnectioErrorToConnLost errConnClosed"$fExceptionConnectionLostExceptionRedisArgencode$fRedisResult[]$fRedisResult(,)$fRedisResult[]0$fRedisResultMaybe$fRedisResultBool$fRedisResultRedisType$fRedisResultStatus$fRedisResultDouble$fRedisResultInteger$fRedisResultByteString$fRedisResultReply$fNFDataStatus$fRedisArgDouble$fRedisArgInteger$fRedisArgByteStringGHC.BaseJust Data.EitherEitherrunRedisInternal 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 runRedisTxexec$fNFDataTxResult $fMonadQueued$fApplicativeQueued$fFunctorQueued$fRedisCtxRedisTxQueued$fMonadRedisRedisTx