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 = lift getTemplates
    getTextTemplatesByLanguage = lift . getTextTemplatesByLanguage