€      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ NoneConnection socket-handle. Reply thunks. %See note [Eval thread synchronization]. ThreadID of the eval thread. /Write the request to the socket output buffer. The  is ed when reading replies. .Take a reply from the list of future replies. LThe list of thunks must be deconstructed lazily, i.e. strictly matching (:) / would block until a reply can be read. Using  and  achieves ~2%  more req/.s in pipelined code than a lazy pattern match ~(r:rs). ERead all the replies from the Handle and return them as a lazy list. 'The actual reading and parsing of each Reply is deferred until the spine & of the list is evaluated up to that Reply. Each Reply is cons' d in front 6 of the (unevaluated) list of all remaining replies.  only evaluates it'%s result once, making this function  thread-safe. 6 as implemented by GHC is also threadsafe, it is safe  to call  here. The list constructor '(:)' must be called from  within; unsafeInterleaveIO, to keep the replies in correct order.   None;Low-level representation of replies from the Redis server.     None             None /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 N example to connect to a password protected Redis server running on localhost $ and listening to the default port:   myConnectInfo :: ConnectInfo 8 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. DMaximum number of connections to keep open. The smallest acceptable  value is 1. @Amount of time for which an unused connection is kept open. The 4 smallest acceptable value is 0.5 seconds. If the timeout value in > your redis.conf file is non-zero, it should be larger than   . !DA threadsafe pool of network connections to a Redis server. Use the  ( function to create one. #:This class captures the following behaviour: In a context m , a command  will return it's result wrapped in a " container" of type f. JPlease refer to the Command Type Signatures section of this page for more  information. $CContext for normal command execution, outside of transactions. Use  % to run actions of this type. .In this context, each result is wrapped in an  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 % may thus block 2 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. &&5 can be used to implement commands from experimental G 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 9 connectAuth = Nothing -- No password B connectMaxConnections = 50 -- Up to 50 connections F connectMaxIdleTime = 30 -- Keep open for 30 seconds (Opens a !+ to a Redis server designated by the given  .  !"#$%&'() password  !"#$%&'() !"#$%&'()None1Options for the U command. 8!A single entry from the slowlog. ::A 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. SRedis default 12. Equivalent to omitting all optional parameters.   SortOpts 1 { sortBy = Nothing -- omit the BY option 7 , sortLimit = (0,-1) -- return entire collection  , sortGet = [] -- omit the GET option 6 , sortOrder = Asc -- sort in ascending order F , sortAlpha = False -- sort numerically, not lexicographically  } <*+,-./0123456789:;<=>key ?key @key Akey pivot value Bkey pivot value Ckey Dcnt EFGkey start stop Hkey start stop Ikey start stop Jkey start stop Kkey min max Lkey min max Mkey min max offset count Nkey min max offset count Okey max min Pkey max min Qkey max min offset count Rkey max min offset count STkey  destination Ukey key  destination V destination keys W destination weighted keys X destination keys Y destination weighted keys  cmd  destination keys weights Zscript keys args [script keys args \key ]key start end ^destkey srckeys _destkey srckeys `destkey srckeys adestkey srckey ! operation keys ";*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY Z[\]^_`a!,*-,+.0/123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY Z[\]^_`a!"Noneh'Encapsulates subscription changes. Use j, k,  l, m or # to construct a value. Combine  values by using the $ interface, i.e. % and &. 'KWhile in PubSub mode, we keep track of the number of current subscriptions I (as reported by Redis replies) and the number of messages we expect to K receive after a SUBSCRIBE or PSUBSCRIBE command. We can safely leave the 0 PubSub mode when both these numbers are zero. iPost a message to a channel ( http://redis.io/commands/publish). j4Listen for messages published to the given channels  ( "http://redis.io/commands/subscribe). k9Stop listening for messages posted to the given channels  ( $http://redis.io/commands/unsubscribe). lGListen for messages published to channels matching the given patterns  ( #http://redis.io/commands/psubscribe). mLStop listening for messages posted to channels matching the given patterns  ( %http://redis.io/commands/punsubscribe). nKListens to published messages on subscribed channels and channels matching G the subscribed patterns. For documentation on the semantics of Redis  Pub/Sub see  http://redis.io/topics/pubsub. BThe given callback function is called for each received message. 5 Subscription changes are triggered by the returned h . To keep 3 subscriptions unchanged, the callback can return #. Example: Subscribe to the "news" channel indefinitely.    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"] 2()*+bcdefg,-./012h3456789:;'<=>?@ABichannel message jchannel kchannel lpattern mpattern nInitial subscriptions. Callback function. CDEFGHIJK bcdefghijklmn(+*)becfgdfg,-./201h3456789:;'<=>?@ABijklmnCDEFGHIJKNone o Result of a w transaction. p)At least one of the commands returned an   reply. q&Transaction aborted due to an earlier u command. rETransaction completed successfully. The wrapped value corresponds to  the s value returned from the w argument action. sA sC 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 w transaction. s( values are composable by utilizing the L, M or  N interfaces. tCommand-context inside of MULTI/EXEC transactions. Use w to run  actions of this type. In the t context, all commands return a s value. It is a  proxy object for the actual, result, which will only be available after  finishing the transaction. u8Watch the given keys to determine execution of the MULTI/ EXEC block  ( http://redis.io/commands/watch). vForget about all watched keys ( http://redis.io/commands/unwatch). wIRun commands inside a transaction. For documentation on the semantics of  Redis transaction see  #http://redis.io/topics/transactions. LInside the transaction block, command functions return their result wrapped  in a s. The s) result is a proxy object for the actual  command'-s result, which will only be available after EXECing the  transaction. Example usage (note how s 's M instance is used to ' combine the two individual results):   runRedis conn $ do  set "hello" "hello"  set "world" "world"  helloworld <- w $ do  hello <- get "hello"  world <- get "world"  return $ (,) <$> hello <*> world  liftIO (print helloworld) opqrsOtPQukey vwRSTUVWX opqrstuvworqpsOtPQuvwRSTUVWX Nonepxyzkey field {key field  increment |key field  increment }key value ~key value key value pattern host port key key  increment member key key  fieldValue key key key count value key  timestamp key key newkey key millisecondsTimestamp message key timeout  destination key host port key destinationDb timeout key db key key key key key newkey key key member key field key  milliseconds key start stop key key seconds source  destination member key start stop key member key value key key value key index key member key key member key  increment key offset value key  increment source  destination timeout key key offset value key key min max key member key key key value key key key field value  parameter  keyValue key seconds value  destination key script key timeout key  milliseconds value source  destination key key key key start stop key index value key value key field key key start end key min max key member script key offset  keyValue key member index  destination key key  timeToLive serializedValue  parameter value key field key key key  scoreMember key  decrement key field value key key value key )*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`axyz{|}~pxyz{|}~None  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~$%#"!( ')>@?1234567S.0/UT Cz{|AB~Z[x89:;<=DEFy*-,+XYGHKLMNIJOPQRVW\]^_`a}uvwsorqptinbecfgdfghjklm& Y      !!"#$%&'()*+,-./0123456789:;<==>?@ABCCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnlopqrstuvwxyz{|}~ -4      !"#$%&0'()*+,-.-/-0-123456789::;<q=>?@ABCD2EFGHIJKLMNOPQRSTUVWTX|}YZ[\]^_`a hedis-0.6.2Database.Redis!Database.Redis.ProtocolPipeliningDatabase.Redis.ProtocolDatabase.Redis.TypesDatabase.Redis.CoreDatabase.Redis.ManualCommandsDatabase.Redis.PubSubDatabase.Redis.TransactionsDatabase.Redis.Commandsnetwork-2.4.1.2Network.SocketHostNameNetwork UnixSocketService PortNumberPortIDConnectionLostExceptionConnectionLostReply MultiBulkBulkIntegerError SingleLine RedisTypeZSetSetListHashStringNoneStatusPongOk RedisResultdecode ConnectInfoConnInfo connectHost connectPort connectAuthconnectMaxConnectionsconnectMaxIdleTime Connection MonadRedisRedisCtxRedisrunRedis sendRequestdefaultConnectInfoconnectauth AggregateMaxMinSum SortOrderDescAscSortOptssortBy sortLimitsortGet sortOrder sortAlphaSlowlog slowlogIdslowlogTimestamp slowlogMicros slowlogCmdobjectRefcountobjectIdletimeobjectEncoding linsertBefore linsertAftergetType slowlogGet slowlogLen slowlogResetzrangezrangeWithscores zrevrangezrevrangeWithscores zrangebyscorezrangebyscoreWithscoreszrangebyscoreLimitzrangebyscoreWithscoresLimitzrevrangebyscorezrevrangebyscoreWithscoreszrevrangebyscoreLimitzrevrangebyscoreWithscoresLimitdefaultSortOpts sortStoresort zunionstorezunionstoreWeights zinterstorezinterstoreWeightsevalevalshabitcount bitcountRangebitopAndbitopOrbitopXorbitopNotMessagePMessage msgPattern msgChannel msgMessagePubSubpublish subscribe unsubscribe psubscribe punsubscribepubSubTxResultTxError TxAborted TxSuccessQueuedRedisTxwatchunwatch multiExecflushalltimehdelhincrby hincrbyfloatgetsetrpushxsetnxkeysbgsaveslaveof debugObject bgrewriteaofzincrbysinterhmsetscardgetlremexpireatincrrenamenx pexpireatsaveechoblpop sdiffstoremigratemovehvalsexistssmembersdecrrenamesunionpingzremhmgetpexpiredbsizelrangelpopexpireflushdbsmovezremrangebyranksaddlpushstrlensetlindexzscoreconfigResetstatdelzrevrank scriptKillincrbysetbit incrbyfloat brpoplpushrpopsetrangettlzremrangebyscorezrankhkeysdumprpushpttlspop randomkeyhsetnx configGetmsetsetex sunionstore scriptExistsbrpoppsetex rpoplpushhlenhgetallzcardltrimlsetappendinfohgetsdiffgetrangezcountsremquit scriptLoadgetbitmsetnx sismemberselect sinterstorerestore configSethexists scriptFlushllenlastsavemgetzadddecrbyhset srandmemberlpushxpersist connHandle connReplies connThunks connEvalTIdsendbaseGHC.IO.Handle.TypesHandle GHC.IO.HandlehFlushrecvGHC.Listheadtail hGetRepliesGHC.IOunsafeInterleaveIOConn disconnectrequest"$fExceptionConnectionLostException renderRequest renderArgshowBScrlfreply singleLineerrorintegerbulk multiBulkRedisArgencode$fRedisResult[]$fRedisResult(,)$fRedisResult[]0$fRedisResultMaybe$fRedisResultBool$fRedisResultRedisType$fRedisResultStatus$fRedisResultDouble$fRedisResultInteger$fRedisResultByteString$fRedisResultReply$fRedisArgDouble$fRedisArgInteger$fRedisArgByteString Data.MaybeJust Data.EitherEitherrunRedisInternal liftRedis returnDecode$fMonadRedisRedis$fRedisCtxRedisEither sortInternalzstoreInternalbitop$fRedisResultSlowlog Data.MonoidmemptyMonoidmappendmconcat PubSubState PubSubReplyMsg Unsubscribed SubscribedCommandredisCmd updatePendingCmdchanges DoNothingsubsunsubspsubspunsubsPatternChannel Unsubscribe SubscribesubCntpending modifyPending putSubCntsendCmd plusChangeCnt decodeMsgerrMsg $fCommandCmd $fCommandCmd0 $fCommandCmd1 $fCommandCmd2 $fMonoidCmd $fMonoidCmd0$fMonoidPubSubGHC.BaseFunctorControl.Applicative ApplicativeMonad runRedisTxmultiexec $fMonadQueued$fApplicativeQueued$fFunctorQueued$fRedisCtxRedisTxQueued$fMonadRedisRedisTx