\subsection{Arrows}
Another abstraction mechanism offered by Haskell are arrows. Arrows are
-a generalisation of monads \cite[hughes98], for which \GHC also supports
+a generalisation of monads \cite[hughes98], for which \GHC\ also supports
some syntax sugar \cite[paterson01]. Their use for hiding away state
boilerplate is not directly evident, but since arrows are a complex
concept further investigation is appropriate.
The main cost of this approach will probably be extra complexity in the
compiler: The paths (state) data can take become very non-trivial, and it
is probably hard to properly analyze these paths and produce the
-intended \VHDL description.
+intended \VHDL\ description.
\section{Multiple cycle descriptions}
In the current Cλash prototype, every description is a single-cycle
probably a non-trivial problem, though.
\section{Don't care values}
- A powerful value in \VHDL is the \emph{don't care} value, given as
+ A powerful value in \VHDL\ is the \emph{don't care} value, given as
\type{'-'}. This value tells the compiler that you do not really care about
which value is assigned to a signal, allowing the compiler to make some
optimizations. Since choice in hardware is often implemented using
This would also require some kind of \quote{Don't careable} type class
that allows each type to specify what its don't care value is. The
compiler must then recognize this constant and replace it with don't care
- values in the final \VHDL code.
+ values in the final \VHDL\ code.
This is of course a very intrusive solution. Every type must become member
of this type class, and there is now some member in every type that is a