&b      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a Safe-Inferredbcdefgbbcdefg Safe-Inferred;Utility class for conversion to and from Strict ByteString hijklmnhijklmn Safe-Inferredmessage recieved by pattern message recieved pattern unsubscribed pattern subscribed  unsubscribed  subscribed Redis reply variants 9Complex reply. It may consists of various type of replys Multiline reply Integer reply Simple oneline reply Some kind of server-side error Used inside multi-exec block Reply for the ping command "Ok" reply *Error converting value from ByteString. It's a client-side error. Timeout. Currently unused oRedis command variants Redis connection descriptor phostname and port pair qcurrently selected database rreal network connection scurrently in PUB/ SUB mode tmap of the renamed commands = ouvwxyzpqrst{|}~< ouvwxyzpqrst{|}~    oxwvuyzpqrst{|}~NoneOptions data type for the  command sort with descending order return (from, to) elements sort alphabetically sort by value from this key return this keys values !store result to this key &Class for conversion value to ( Definied instances is:  the Interval itself  pair (a,b) for open interval  two-member list [a, b]L for closed interval (throws runtime error if the list length is different) (Interval representation )right-open interval [a, b) *left-open interval (a, b] +open interval (a, b) ,closed interval [a, b] 7default Redis port 8just a localhost 9Ba (0, -1) range - takes all element from a list in lrange, zrange  and so on :Unwraps RInline reply. FThrows an exception when called with something different from RInline ;Unwraps RBulk reply. DThrows an exception when called with something different from RBulk <0The same as fromRBulk but with fromJust applied =Unwraps RMulti reply EThrows an exception when called with something different from RMulti >'Unwraps RMulti reply filled with RBulk EThrows an exception when called with something different from RMulti ?5The same as fromRMultiBulk but with fromJust applied @Unwraps RInt reply CThrows an exception when called with something different from RInt AUnwraps ROk reply BThrows an exception when called with something different from ROk BUnwraps every non-error reply EThrows an exception when called with something different from RMulti CParse Reply as a Message #Throws an exception on parse error D:Conects to Redis server and returns connection descriptor EClose connection F/Returns True when connection handler is opened G!Returns connection host and port H$Returns currently selected database IAdds command to renaming map J ping - pong %RPong returned if no errors happends KPassword authentication  ROk returned LEcho the given string RBulk returned MQuit and close connection N8Stop all the clients, save the DB, then quit the server OBegin the multi-exec block  ROk returned PExecute queued commands 4RMulti returned - replies for all executed commands Q*Discard queued commands without execution  ROk returned R%Run commands within multi-exec block 4RMulti returned - replies for all executed commands S6Add keys to a watch list for Check-and-Set operation. For more information see  #http://redis.io/topics/transactions  ROk returned TForce unwatch all watched keys For more information see  #http://redis.io/topics/transactions  ROk returned URun actions in a CAS manner  You have to explicitly add multi/ exec commands to an appropriate B place in an action sequence. Command sequence will be explicitly  terminated with unwatch command even if exec command was sent. 'Result of user-defined action returned VTest if the key exists ;(RInt 1) returned if the key exists and (RInt 0) otherwise WRemove the key N(RInt 0) returned if no keys were removed or (RInt n) with removed keys count XVariadic form of DEL 'RInt returned - number of deleted keys Y?Return the type of the value stored at key in form of a string RedisKeyType returned Z5Returns all the keys matching the glob-style pattern "RMulti filled with RBulk returned [Return random key name RBulk returned \/Rename the key. If key with that name exists it'll be overwritten.  ROk returned ]8Rename the key if no keys with destination name exists. <(RInt 1) returned if key was renamed and (RInt 0) otherwise ^:Get the number of keys in the currently selected database RInt returned _;Set an expiration timeout in seconds on the specified key. For more information see  http://redis.io/commands/expire <(RInt 1) returned if timeout was set and (RInt 0) otherwise `FSet an expiration time in form of UNIX timestamp on the specified key For more information see  !http://redis.io/commands/expireat <(RInt 1) returned if timeout was set and (RInt 0) otherwise aRemove the timeout from a key D(RInt 1) returned if the timeout was removed and (RInt 0) otherwise b@Return the remining time to live of the key or -1 if key has no  associated timeout RInt returned c:Select the DB with the specified zero-based numeric index  ROk returned d=Move the specified key from the currently selected DB to the B specified destination DB. If such a key is already exists in the + target DB no data modification performed. >(RInt 1) returned if the key was moved and (RInt 0) otherwise e1Delete all the keys of the currently selected DB  ROk returned f2Delete all the keys of all the existing databases  ROk returned g>Returns different information and statistics about the server for more information see  http://redis.io/commands/info  returned h)Set the string value as value of the key  ROk returned i)Set the key value if key does not exists 8(RInt 1) returned if key was set and (RInt 0) otherwise jBAtomically sets target key value and assigns expiration time. The  same as ,multi; set key val; expire key seconds; exec but faster. 2Arguments order is the same as in Redis protocol.  ROk returned kAtomically set multiple keys  ROk returned l5Atomically set multiple keys if none of them exists. =(RInt 1) returned if all keys was set and (RInt 0) otherwise m$Get the value of the specified key. RBulk returned n3Atomically set this value and return the old value RBulk returned o%Get the values of all specified keys *RMulti filled with RBulk replies returned pIncrement the key value by one !RInt returned with new key value qIncrement the key value by N !RInt returned with new key value rIncrement the key value by N +(RBulk Double) returned with new key value sDecrement the key value by one !RInt returned with new key value tDecrement the key value by N !RInt returned with new key value u&Append string to the string-typed key /RInt returned - the length of resulting string v9Returns the substring of the string value stored at key, 3 determined by the offsets start and end (both are A inclusive). Negative offsets can be used in order to provide an - offset starting from the end of the string. RBulk returned w9Returns the substring of the string value stored at key, 3 determined by the offsets start and end (both are A inclusive). Negative offsets can be used in order to provide an - offset starting from the end of the string. RBulk returned x=Overwrites part of the string stored at key, starting at the D specified offset, for the entire length of value. If the offset is D larger than the current length of the string at key, the string is B padded with zero-bytes to make offset fit. Non-existing keys are @ considered as empty strings, so this command will make sure it @ holds a string large enough to be able to set value at offset. )RInt returned - resulting string length. y>Returns the bit value at offset in the string value stored at E key. When offset is beyond the string length, the string is assumed E to be a contiguous space with 0 bits. When key does not exist it is E assumed to be an empty string, so offset is always out of range and A the value is also assumed to be a contiguous space with 0 bits. RInt returned zDSets or clears the bit at offset in the string value stored at key.  For more information see  http://redis.io/commands/setbit 9RInt returned - the original bit value stored at offset. {'Returns a length of a string-typed key RInt returned |<Add string value to the tail of the list-type key. New list  length returned RInt returned }Variadic form of rpush RInt returned ~<Add string value to the head of the list-type key. New list  length returned RInt returned Variadic form of LPUSH RInt returned BAdd string value to the head of existing list-type key. New list D length returned. If such a key was not exists, list is not created  and (RInt 0) returned. RInt returned AAdd string value to the tail of existing list-type key. New list E length returned. If such a key was not exists, list is not created  and (RInt 0) returned. RInt returned ?Inserts value in the list stored at key either before or after  the reference value pivot. TRInt returned - resulting list length or (RInt -1) if target element was not found. >Return lenght of the list. Note that for not-existing keys it  returns zero length. -RInt returned or RError if key is not a list AReturn the specified range of list elements. List indexed from 0 / to (llen - 1). lrange returns slice including "from" and "to" B elements, eg. lrange 0 2 will return the first three elements of  the list.  Parameters "from" and "to"/ may also be negative. If so it will counts as B offset from end ot the list. eg. -1 - is the last element of the 2 list, -2 - is the second from the end and so on. "RMulti filled with RBulk returned HTrim list so that it will contain only the specified range of elements.  ROk returned 6Return the specified element of the list by its index RBulk returned  Set the list's value indexed by an index to the new value >ROk returned if element was set and RError if index is out of  range or key is not a list Remove the first count occurrences of the value element from the list /RInt returned - the number of elements removed ;Atomically return and remove the first element of the list RBulk returned :Atomically return and remove the last element of the list RBulk returned <Atomically return and remove the last (tail) element of the B source list, and push the element as the first (head) element of  the destination list RBulk returned Blocking lpop For more information see  http://redis.io/commands/blpop Return (Just (key, value)) if value was successfully popped from key& list or Nothing of timeout exceeded. Blocking rpop For more information see  http://redis.io/commands/brpop Return (Just (key, value)) if value was successfully popped from key& list or Nothing of timeout exceeded. Blocking rpoplpush For more information see  #http://redis.io/commands/brpoplpush ]Return (Just $ Maybe value) if value was successfully popped or Nothing if timeout exceeded. 8Add the specified member to the set value stored at key C(RInt 1) returned if element was added and (RInt 0) if element was  already a member of the set Variadic form of SADD 1RInt returned - number of actualy added elements =Remove the specified member from the set value stored at key A(RInt 1) returned if element was removed and (RInt 0) if element  is not a member of the set Variadic form of SREM )RInt returned - number of removed values @Remove a random element from a Set returning it as return value RBulk returned 3Move the specifided member from one set to another ?(RInt 1) returned if element was moved and (RInt 0) if element # is not a member of the source set 6Return the number of elements of the set. If key doesn' t exists 0  returned. RInt returned 2Test if element is member of the set. If key doesn' t exists 0  returned. I(RInt 1) returned if element is member of the set and (RInt 0) otherwise -Return all the members (elements) of the set "RMulti filled with RBulk returned #Return a random element from a set RBulk returned ?Return the members of a set resulting from the intersection of  all the specifided sets "RMulti filled with RBulk returned  The same as 1 but instead of being returned the resulting set  is stored +RInt returned - resulting set cardinality. @Return the members of a set resulting from the union of all the  specifided sets "RMulti filled with RBulk returned  The same as 1 but instead of being returned the resulting set  is stored +RInt returned - resulting set cardinality. BReturn the members of a set resulting from the difference between 4 the first set provided and all the successive sets "RMulti filled with RBulk returned  The same as - but instead of being returned the resulting  set is stored +RInt returned - resulting set cardinality. BAdd the specified member having the specifeid score to the sorted  set @(RInt 1) returned if new element was added and (RInt 0) if that B element was already a member of the sortet set and the score was  updated Variadic form of zadd ;RInt returned - the number of elements actually added. Not 3 including elements which scores was just updated. 0Remove the specified member from the sorted set A(RInt 1) returned if element was removed and (RInt 0) if element $ was not a member of the sorted set Variadic form of zrem 0 RInt returned - the number of removed elements If member$ already in the sorted set adds the  increment to its A score and updates the position of the element in the sorted set E accordingly. If member does not exist in the sorted set it is added B with increment as score (that is, like if the previous score was ; virtually zero). The new score of the member is returned. RBulk returned ?Return the specified elements of the sorted set. Start and end > are zero-based indexes. WITHSCORES paramenter indicates if it's D needed to return elements with its scores or not. If WITHSCORES is B True then the resulting list will be composed of value1, score1,  value2, score2 and so on. "RMulti filled with RBulk returned AReturn the specified elements of the sorted set at the specified A key. The elements are considered sorted from the highest to the  lowerest score "RMulti filled with RBulk returned @Return the all the elements in the sorted set with a score that  lays within a given interval "RMulti filled with RBulk returned @Return the all the elements in the sorted set with a score that @ lays within a given interval. Elements is ordered from greater ? score to lower. Interval passed into command must be reversed & (first value is greater then second) "RMulti filled with RBulk returned ?Count a number of elements of the sorted set with a score that  lays within a given interval RInt returned ARemove all the elements in the sorted set with a score that lays 4 within a given interval. For now this command doesn't supports open  and semi-open intervals /RInt returned - the number of elements removed 7Return the sorted set cardinality (number of elements) RInt returned <Return the score of the specified element of the sorted set RBulk returned AReturns the rank of member in the sorted set stored at key, with & the scores ordered from low to high. ?RInt returned or (RBulk Nothing) if value is not found in set. AReturns the rank of member in the sorted set stored at key, with & the scores ordered from high to low. ?RInt returned or (RBulk Nothing) if value is not found in set. BRemove elements from the sorted set with rank lays within a given  interval. /RInt returned - the number of elements removed 7Create a union of provided sorted sets and store it at  destination key If weights2 is not null then scores of sorted sets used with ( corresponding weights. If so lenght of weights must be the same  as length of sources.  Aggregate1 is an option how to aggregate resulting scores. =RInt returned - the number of elements in the resulting set. OCreate an intersectoin of provided sorted sets and store it at destination key If weights2 is not null then scores of sorted sets used with ( corresponding weights. If so lenght of weights must be the same  as length of sources. :Aggregate is an option how to aggregate resulting scores. =RInt returned - the number of elements in the resulting set. 4Set the specified hash field to the specified value N(RInt 0 returned if field value was updated and (RInt 1) if new field created 7Return value associated with specified field from hash RBulk returned Remove field from a hash >(RInt 1) returned if field was removed and (RInt 0) otherwise Variadic form of HDEL )RInt returned - number of fields deleted 8Atomically sets multiple fields within a hash-typed key  ROk returned ?Get the values of all specified fields from the hash-typed key *RMulti filled with RBulk replies returned -Increment the field value within a hash by N !RInt returned with new key value -Increment the field value within a hash by N +(RBulk Double) returned with new key value *Test if hash contains the specified field 9(RInt 1) returned if fiels exists and (RInt 0) otherwise <Return the number of fields contained in the specified hash RInt returned ,Return all the field names the hash holding !RMulti field with RBulk returned 2Return all the associated values the hash holding !RMulti field with RBulk returned BReturn all the field names and associated values the hash holding  in form of #[field1, value1, field2, value2...] .RMulti field with RBulk returned. If key doesn't exists (RMulti [] ) returned. Default options for the  command <Sort the elements contained in the List, Set, or Sorted Set for more information see  http://redis.io/commands/sort "RMulti filled with RBulk returned Shortcut for the  with some   and constant   options "RMulti filled with RBulk returned 7Get a number of subscribed channels on this connection It doesn';t run any redis commands, number of subscribtions is taken  from internal connection state Subscribe to channels 7list of Message with subscribtion information returned =Unsubscribe from channels. If called with an empty list then  unsubscribe all channels 7list of Message with subscribtion information returned Subscribe to patterns 7list of Message with subscribtion information returned =Unsubscribe from patterns. If called with an empty list then  unsubscribe all patterns 7list of Message with subscribtion information returned "Publish message to target channel >RInt returned - a number of clients that recieves the message Wait for a messages. 5Just Message returned or Nothing if timeout exceeded Save the whole dataset on disk  ROk returned Save the DB in background  ROk returned ?Return the UNIX TIME of the last DB save executed with success RInt returned ,Rewrites the Append Only File in background  ROk returned Two-element list [a, b]) converted to closed interval. No static $ checking of list length performed. 'Pair (a, b) converted to open interval Trivial IsInterval instance  !"#$%&'()*+,-./0123456789:;<=>?@ABCD%hostname or path to the redis socket "port or null if unix sockets used EFGHIcommand to rename  new name JK password L what to echo MNOPQRIO action to run Skeys to watch for TU keys watched action to run V target key W target key Xtarget keys list Y target key Ztarget keys pattern [\ source key destination key ] source key destination key ^_ target key timeout in seconds ` target key expiration time a target key b target key cdatabase number d target key destination database number efgh target key value i target key value j target key timeout in seconds value k(key, value) pairs l(key, value) pairs m target key n target key value o target keys p target key q target key  increment r target key  increment s target key t target key  decrement u target key value v target key  (start, end) w target key  (start, end) x target key offset value y target key  bit offset z target key  bit offset bit value - 0 or 1 { target key | target key value } target key  values list ~ target key value  target key  values list  target key value to push  target key value to push  target list "where to insert - before or after target element inserted value  target key  target key (from, to) pair  target key (from, to) pair  target key index  target key index  new value  target key  occurrences value  target key  target key  source key destination key  keys list timeout  keys list timeout  source key destination key timeout  target key value  target key  values list  target key value  target key  values list  target key  source key destination key value  target key  target key value to test  target key  target key  keys list where to store resulting set  sets list  keys list where to store resulting set  sets list  keys list where to store resulting set  sets list  target key score value  target key list of score-value pairs  target key value  target key  values list  target key  increment value  target key (from, to) pair withscores option  target key (from, to) pair withscores option  target key scores interval limits (offset, count) withscores option  target key scores interval  target key "(from, to) pair. zremrangebyscore  currently doesn' t supports  open intervals  target key  target key value  target key value  target key value destination key  sources keys weights  aggregate destination key  sources keys weights  aggregate  target key  field name value key  field name key  field name key  field name  target key (field, value) pairs  target key  field names  target key  field name  increment  target key  field name  increment key  field name  target key  target key options  related key  index key range channels to subscribe channels to unsubscribe patterns to subscribe patterns to unsubscribe channel message timeout   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   -/.(,+*)&' !"%$#0654321:;<=>?@ABC987DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"%$#&'(,+*)-/.0654321789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW  !"#$%&'()*+,-./0789:;=>?@ABC      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVW   -/.(,+*)&' !"%$#0:;=>?@ABC987      !"#$%&'()*+,-./0123456789;=:<>?@ABCDEFGHIJKLMNOPQRSTUVW      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWNoneX>Trivial WithRedis instance storing Redis descriptor in StateT XYXYXYXYNoneZ>Acquire lock. This function is not reentrant so thread can be C locked by itself if it try to acquire the same lock before it was  released. [;acquire with default last parameter set to 50 milliseconds \?Try to acquire lock once and return result without any timeout ]@Release lock. There is no any guarantees that lock was acquired 6 in this thread. Just release this lock and go forth. ZThe lock's name Timeout in milliseconds. *Time interval between attempts to lock on True if lock was acquired [\]Z[\]Z[\]Z[\]None^_`a^_`a^_`a^_`a      !""#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~KLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      redis-0.13Database.Redis.RedisDatabase.Redis.ByteStringClassDatabase.Redis.MonadDatabase.Redis.Monad.StateDatabase.Redis.Utils.LockDatabase.Redis.Utils.Monad.LockDatabase.Redis.InfoDatabase.Redis.Internal RedisInfoBStoBSfromBSMessage MPMessageMMessage MPUnsubscribe MPSubscribe MUnsubscribe MSubscribeReplyRMultiRBulkRIntRInlineRErrorRQueuedRPongROk RParseErrorRTimeoutRedisr_lockr_st SortOptionsdesclimitalphasort_byget_objstore AggregateMAXMINSUM IsInterval toIntervalInterval RightOpenLeftOpenOpenClosedLInsertDirectionAFTERBEFORE RedisKeyTypeRTHashRTZSetRTSetRTListRTStringRTNone defaultPort localhosttakeAll fromRInline fromRBulk fromRBulk' fromRMultifromRMultiBulkfromRMultiBulk'fromRIntfromROknoError parseMessageconnect disconnect isConnected getServer getDatabase renameCommandpingauthechoquitshutdownmultiexecdiscard run_multiwatchunwatchrun_casexistsdeldel_getTypekeys randomKeyrenamerenameNxdbsizeexpireexpireAtpersistttlselectmoveflushDbflushAllinfosetsetNxsetExmSetmSetNxgetgetSetmGetincrincrBy incrByFloatdecrdecrByappendsubstrgetrangesetrangegetbitsetbitstrlenrpushrpush_lpushlpush_lpushxrpushxlinsertllenlrangeltrimlindexlsetlremlpoprpop rpoplpushblpopbrpop brpoplpushsaddsadd_sremsrem_spopsmovescard sismembersmembers srandmembersinter sinterStoresunion sunionStoresdiff sdiffStorezaddzadd_zremzrem_zincrByzrange zrevrange zrangebyscorezrevrangebyscorezcountzremrangebyscorezcardzscorezrankzrevrankzremrangebyrank zunionStorezunion zinterStorezinterhsethgethdelhdel_hmsethmgethincrBy hincrByFloathexistshlenhkeyshvalshgetall sortDefaultssort listRelated subscribed subscribe unsubscribe psubscribe punsubscribepublishlistensavebgsavelastsave bgrewriteaof WithRedisgetRedissetRedisRedisM runWithRedisacquireacquire' acquireOncerelease parseInfofilterEmptyLines startsWithtrimfilterComments parsePairs$fBS() $fBSDouble$fBSInt$fBS[]$fBSChar$fBSByteString$fBSByteString0Commandserverdatabasehandle isSubscribedrenamedCommandsCMBulkCBulkCMInlineCInline RedisStateblocktracebstracebs'newRedisshowbsurnuspaceuminusuplusucolonubucks uasteriskhPutRn takeStateputStateputStateUnmodifiedinStateinState_ withState withState'send lookupRenamed sendCommand sendCommand'recvwait $fShowReply$fIsInterval[]a$fIsInterval(,)a$fIsIntervalIntervala socket_inet socket_unix parseTypefromtorecv_$fWithRedisStateTdiffClockTimesMs