embedded domain specific language. Each of these have a slightly different
approach, but all of these do some trickery inside the Haskell language
itself, meaning you write a program that generates a hardware circuit,
instead of describing the circuit directly (either by running the haskell
code after compilation, or using Template Haskell to inspect parts of the
code you have written). This allows the full power of Haskell for generating
embedded domain specific language. Each of these have a slightly different
approach, but all of these do some trickery inside the Haskell language
itself, meaning you write a program that generates a hardware circuit,
instead of describing the circuit directly (either by running the haskell
code after compilation, or using Template Haskell to inspect parts of the
code you have written). This allows the full power of Haskell for generating