content: {-|
  
  This module defines the API for writing and working with interpreted splices.
  It exports some of the same symbols as "Heist.Compiled", so you will probably
  want to import it qualified.
  
  Interpreted splices can be thought of as a function @Node -> m [Node]@.  Heist
  then substitutes the resulting list of nodes into your template in place of
  the input node.  'Splice' is implemented as a type synonym @type Splice m =
  HeistT m [Node]@, and 'HeistT' has a function 'getParamNode' that lets you get
  the input node.
  
  Suppose you have a place on your page where you want to display a link with
  the text \"Logout username\" if the user is currently logged in or a link to
  the login page if no user is logged in.  Assume you have a function
  @getUser :: MyAppMonad (Maybe Text)@ that gets the current user.
  You can implement this functionality with a 'Splice' as follows:
  
  > import           Blaze.ByteString.Builder
  > import           Data.ByteString.Char8 (ByteString)
  > import qualified Data.ByteString.Char8 as B
  > import           Data.Text (Text)
  > import qualified Data.Text as T
  > import qualified Text.XmlHtml as X
  >
  > import qualified Heist.Interpreted as I
  >
  > link :: Text -> Text -> X.Node
  > link target text = X.Element "a" [("href", target)] [X.TextNode text]
  >
  > loginLink :: X.Node
  > loginLink = link "/login" "Login"
  >
  > logoutLink :: Text -> X.Node
  > logoutLink user = link "/logout" (T.append "Logout " user)
  >
  > loginLogoutSplice :: I.Splice MyAppMonad
  > loginLogoutSplice = do
  >     user <- lift getUser
  >     return [maybe loginLink logoutLink user]
  >
  
  -}
  
  module Heist.Interpreted
    (
      Splice
  
    -- * HeistState Functions
    , addTemplate
    , addXMLTemplate
    , lookupSplice
    , bindSplice
    , bindSplices
    , bindAttributeSplices
  
    -- * Functions for creating splices
    , textSplice
    , runChildren
    , runChildrenWith
    , runChildrenWithTrans
    , runChildrenWithTemplates
    , runChildrenWithText
    , mapSplices
  
    -- * HeistT functions
    , stopRecursion
    , runNode
    , runAttributes
    , runNodeList
    , evalTemplate
    , bindStrings
    , bindString
    , callTemplate
    , callTemplateWithText
    , renderTemplate
    , renderTemplateToDoc
    , renderWithArgs
    ) where
  
  import Heist.Interpreted.Internal
  import Heist.Common (mapSplices, bindAttributeSplices)
  
  