\chapter[chap:context]{Context}
  An obvious question that arises when starting any research is \quote{Hasn't
  this been done before?} Using a functional language for describing hardware
  is not a new idea at all. In fact, there has been research into functional
  hardware description even before the conventional hardware description
  languages were created. However, functional languages were not nearly as
  advanced as they are now, and functional hardware description never really
  got off. 

  Recently, there have been some renewed efforts, especially using the Haskell
  language. Examples are Lava, ForSyde, ..., which are all a form of an
  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
  a circuit, but only it also creates severe limitations in the use of the
  language (you can't use case statements in Lava, since they would be
  executed only once during circuit generation) and extra notational overhead.

TODO: Define (E)DSL
TODO: References

  Advantages over conventional HDLs
   - More consise
   - More expressive
   - Easy to transform / optimize / etc.

  Advantages over existing FHDLs
   - More control
   - Full Haskell available
   - Concise notation

  Disadvantages over existing FHDLs
   - More work to implement advanced things
