module Web.Apiary.Database.Redis
(
RedisConn
, initRedis
, redis
) where
import Control.Monad.IO.Class(MonadIO(..))
import qualified Database.Redis as Redis
import Data.Proxy(Proxy(..))
import Data.Apiary.Extension
(Has, Initializer, initializer', Extension, MonadExts, getExt)
newtype RedisConn = RedisConn Redis.Connection
instance Extension RedisConn
initRedis :: (Monad m)
=> Redis.Connection -> Initializer m exts (RedisConn ': exts)
initRedis conn = initializer' $ return (RedisConn conn)
redis :: (MonadExts es m, Has RedisConn es, MonadIO m) => Redis.Redis a -> m a
redis r = do
getExt (Proxy :: Proxy RedisConn) >>= \ (RedisConn c) ->
liftIO $ Redis.runRedis c r