{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-} module Text.StringTemplate.Renderf ((|=), SEType(..)) where import Text.StringTemplate.Base class Stringable b => SEType b a where renderf :: StringTemplate b -> a instance Stringable a => SEType a a where renderf :: StringTemplate a -> a renderf = StringTemplate a -> a forall a. Stringable a => StringTemplate a -> a render instance Stringable a => SEType a (StringTemplate a) where renderf :: StringTemplate a -> StringTemplate a renderf = StringTemplate a -> StringTemplate a forall a. a -> a id instance (ToSElem a, SEType b r) => SEType b ((String, a) -> r) where renderf :: StringTemplate b -> (String, a) -> r renderf StringTemplate b x (String k, a v) = StringTemplate b -> r forall b a. SEType b a => StringTemplate b -> a renderf (StringTemplate b -> r) -> StringTemplate b -> r forall a b. (a -> b) -> a -> b $ String -> a -> StringTemplate b -> StringTemplate b forall a b. (ToSElem a, Stringable b) => String -> a -> StringTemplate b -> StringTemplate b setAttribute String k a v StringTemplate b x (|=) :: (Monad m) => a -> m a1 -> m (a, a1) a k |= :: a -> m a1 -> m (a, a1) |= m a1 v = (a, a1) -> m (a, a1) forall (m :: * -> *) a. Monad m => a -> m a return ((a, a1) -> m (a, a1)) -> (a1 -> (a, a1)) -> a1 -> m (a, a1) forall b c a. (b -> c) -> (a -> b) -> a -> c . (,) a k (a1 -> m (a, a1)) -> m a1 -> m (a, a1) forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b =<< m a1 v infixl 5 |=