relational-query-0.0.1.0: src/Database/Relational/Query/Monad/Trans/Config.hs
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-- |
-- Module : Database.Relational.Query.Monad.Trans.Config
-- Copyright : 2013 Kei Hibino
-- License : BSD3
--
-- Maintainer : ex8k.hibino@gmail.com
-- Stability : experimental
-- Portability : unknown
--
-- This module defines monad transformer which requires query generate configuration.
module Database.Relational.Query.Monad.Trans.Config (
-- * Transformer into query with configuration
QueryConfig, queryConfig,
runQueryConfig, askQueryConfig
) where
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Reader (ReaderT, runReaderT, ask)
import Control.Applicative (Applicative)
import Database.Relational.Query.Component (Config)
-- | 'ReaderT' type to require query generate configuration.
newtype QueryConfig m a =
QueryConfig (ReaderT Config m a)
deriving (Monad, Functor, Applicative)
-- | Run 'QueryConfig' to expand with configuration
runQueryConfig :: QueryConfig m a -> Config -> m a
runQueryConfig (QueryConfig r) = runReaderT r
-- | Lift to 'QueryConfig'.
queryConfig :: Monad m => m a -> QueryConfig m a
queryConfig = QueryConfig . lift
-- | Read configuration.
askQueryConfig :: Monad m => QueryConfig m Config
askQueryConfig = QueryConfig ask