A template system is a bridge between static data (templates) and dynamic data.
Heist is a template system bridging HTML templates and Haskell code.
A splice is code that Heist binds to an HTML tag.
Every time the tag appears in a template, Heist runs the splice bound to that tag and passes the tag (including its attributes and its children) as input to the splice.
A splice's output is a list of tags that get substituted into the template in place of the original input tag.
Splices can be thought of as functions that can be called from templates to get dynamic data.
Splices can pass this dynamic data back to templates by (temporarily) binding new splices.
<bind> is a tag you can use in your templates to create new splices on the fly.
<apply> is a tag that lets you insert one template into another.
A more in-depth tutorial is here.