packages feed

templatise-0.1.3.0: lib/initialise/Initialiser/Types.hs

{-# LANGUAGE GeneralizedNewtypeDeriving #-}

module Initialiser.Types
  ( Initialiser,
    runInitialiser,
  )
where

import Configuration (Configuration)
import Control.Monad.Catch (MonadThrow)
import Control.Monad.IO.Class (MonadIO)
import Control.Monad.Logger (LoggingT, MonadLogger, runStderrLoggingT)
import Control.Monad.Reader (MonadReader, ReaderT, runReaderT)

newtype Initialiser a = Initialiser
  { run :: LoggingT (ReaderT Configuration IO) a
  }
  deriving (Applicative, Functor, Monad, MonadIO, MonadLogger, MonadReader Configuration, MonadThrow)

runInitialiser :: Initialiser a -> Configuration -> IO a
runInitialiser initialiser = runReaderT (runStderrLoggingT $ run initialiser)