Skip to content

Instantly share code, notes, and snippets.

@mxswd
Created June 6, 2013 22:00
Show Gist options
  • Save mxswd/5725341 to your computer and use it in GitHub Desktop.
Save mxswd/5725341 to your computer and use it in GitHub Desktop.
Data.Text interface to hedis (Redis)
{-# LANGUAGE NoMonomorphismRestriction, OverloadedStrings #-}
module Backend.Redis (connect, get, set, R.Connection) where
import Control.Monad.IO.Class
import qualified Database.Redis as R
import Control.Applicative
import qualified Data.Text.Lazy as L
import qualified Data.Text.Lazy.Encoding as L
import qualified Data.Text.Encoding as T
import qualified Data.ByteString.Char8 as BS
-- :(
fromStrict :: BS.ByteString -> L.Text
fromStrict = L.fromStrict . T.decodeUtf8
toStrict :: L.Text -> BS.ByteString
toStrict = T.encodeUtf8 . L.toStrict
connect = liftIO $ R.connect R.defaultConnectInfo
set :: (MonadIO m) => R.Connection -> L.Text -> L.Text -> m Bool
set redis idx val = liftIO $ R.runRedis redis $ do
c <- R.set (toStrict idx) (toStrict val)
case c of
Right _ -> return True
Left _ -> return False
-- TODO: monad error insteadf of L.Text
get :: (MonadIO m) => R.Connection -> L.Text -> m (Either L.Text (Maybe L.Text))
get redis idx = liftIO $ R.runRedis redis $ do
c <- R.get (toStrict idx)
case c of
Right u -> return $ Right $ fromStrict <$> u
Left _ -> return $ Left "DatabaseError"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment