Working with Hedis
I'm now writing the second Haskell service using Redis to store data. There are a few packages on Hackage related to Redis but I only found 2 client libraries, redis-io and hedis. I must say I like the API of redis-io better, but it breaks a rule I hold very dear:
Libraries should never log, that's the responsibility of the application.
So, hedis it is. I tried using the API as is, but found it really cumbersome so looked around and after some inspiration from hedis-simple I came up with the following functions.
First a wrapper around a Redis function that put everything into ExceptionT
with a function that transforms a reply
into an Exception
.
lpush :: Exception e => (Reply -> e) -> ByteString -> [ByteString] -> ExceptionT Redis Integer lpush mapper key element = ExceptionT $ replyToExc <$> R.lpush key element where replyToExc = first (toException . mapper)
I found wrapping up functions like this is simple, but repetitive.
Finally I need a way to run the whole thing and unwrap it all back to IO
:
runRedis :: Connection -> ExceptionT Redis a -> IO (Either SomeException a) runRedis conn = R.runRedis conn . runExceptionT