module Text.StringTemplates.Templates.Class where

import Control.Monad.Trans

import Text.StringTemplates.TemplatesLoader

-- | Simple reader monad class that provides access to templates
class (Applicative m, Monad m) => TemplatesMonad m where
  -- | Get templates (for text templates default language name is used).
  getTemplates :: m Templates
  -- | Get templates (for text templates specified language name is used).
  getTextTemplatesByLanguage :: String -> m Templates

-- | Generic, overlappable instance.
instance {-# OVERLAPPABLE #-}
  ( Applicative (t m)
  , Monad (t m)
  , MonadTrans t
  , TemplatesMonad m
  ) => TemplatesMonad (t m) where
    getTemplates :: t m Templates
getTemplates = m Templates -> t m Templates
forall (m :: * -> *) a. Monad m => m a -> t m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift m Templates
forall (m :: * -> *). TemplatesMonad m => m Templates
getTemplates
    getTextTemplatesByLanguage :: String -> t m Templates
getTextTemplatesByLanguage = m Templates -> t m Templates
forall (m :: * -> *) a. Monad m => m a -> t m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (m Templates -> t m Templates)
-> (String -> m Templates) -> String -> t m Templates
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> m Templates
forall (m :: * -> *). TemplatesMonad m => String -> m Templates
getTextTemplatesByLanguage