{-# 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 = forall a. Stringable a => StringTemplate a -> a
render
instance Stringable a => SEType a (StringTemplate a) where
    renderf :: StringTemplate a -> StringTemplate a
renderf = 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) = forall b a. SEType b a => StringTemplate b -> a
renderf forall a b. (a -> b) -> a -> 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 |= :: forall (m :: * -> *) a a1. Monad m => a -> m a1 -> m (a, a1)
|= m a1
v = forall (m :: * -> *) a. Monad m => a -> m a
return forall b c a. (b -> c) -> (a -> b) -> a -> c
. (,) a
k forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< m a1
v
infixl 5 |=