{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# OPTIONS_HADDOCK prune not-home #-}
module KeyedVals.Handle.Redis (
new,
module KeyedVals.Handle,
) where
import Control.Monad.IO.Unlift (MonadUnliftIO, liftIO)
import KeyedVals.Handle
import KeyedVals.Handle.Redis.Internal
import UnliftIO.Exception (throwIO)
new :: MonadUnliftIO m => m (Handle m)
new :: forall (m :: * -> *). MonadUnliftIO m => m (Handle m)
new =
IO (Maybe ConnectInfo) -> m (Maybe ConnectInfo)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO (Maybe ConnectInfo)
readEnvConnectInfo m (Maybe ConnectInfo)
-> (Maybe ConnectInfo -> m (Handle m)) -> m (Handle m)
forall a b. m a -> (a -> m b) -> m b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
(Just ConnectInfo
i) -> ConnectInfo -> m (Handle m)
forall (m :: * -> *).
MonadUnliftIO m =>
ConnectInfo -> m (Handle m)
fromConnectInfo ConnectInfo
i
Maybe ConnectInfo
Nothing -> IO (Handle m) -> m (Handle m)
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Handle m) -> m (Handle m)) -> IO (Handle m) -> m (Handle m)
forall a b. (a -> b) -> a -> b
$ IOError -> IO (Handle m)
forall (m :: * -> *) e a. (MonadIO m, Exception e) => e -> m a
throwIO (IOError -> IO (Handle m)) -> IOError -> IO (Handle m)
forall a b. (a -> b) -> a -> b
$ String -> IOError
userError String
"could not create a Handle that uses redis"