#Step 1: Template Haskell splices The [d| ... |] is a syntax of Template Haskell declaration quote. For example, [d| answer = 42 |] would produce a value of type Q Dec, which is an abstract syntax representation of it. Relatedly, the $(...) is splice syntax. As it appears on the top level, it splices declarations (of the type Q [Dec], or expressions of the type Q Exp depending on the context) into