+ \subsection{State}
+ A very important concept in hardware it the concept of state. In a
+ stateful design, the outputs depend on the history of the inputs, or the
+ state. State is usually stored in registers, which retain their value
+ during a clock cycle. As we want to describe more than simple
+ combinatorial designs, \CLaSH\ needs an abstraction mechanism for state.
+
+ An important property in Haskell, and in most other functional languages,
+ is \emph{purity}. A function is said to be \emph{pure} if it satisfies two
+ conditions:
+ \begin{inparaenum}
+ \item given the same arguments twice, it should return the same value in
+ both cases, and
+ \item when the function is called, it should not have observable
+ side-effects.
+ \end{inparaenum}
+ This purity property is important for functional languages, since it
+ enables all kinds of mathematical reasoning that could not be guaranteed
+ correct for impure functions. Pure functions are as such a perfect match
+ for a combinatorial circuit, where the output solely depends on the
+ inputs. When a circuit has state however, it can no longer be simply
+ described by a pure function. Simply removing the purity property is not a
+ valid option, as the language would then lose many of it mathematical
+ properties. In an effort to include the concept of state in pure
+ functions, the current value of the state is made an argument of the
+ function; the updated state becomes part of the result.
+
+ A simple example is the description of an accumulator circuit:
+ \begin{code}
+ acc :: Word -> State Word -> (State Word, Word)
+ acc inp (State s) = (State s', outp)
+ where
+ outp = s + inp
+ s' = outp
+ \end{code}
+ This approach makes the state of a function very explicit: which variables
+ are part of the state is completely determined by the type signature. This
+ approach to state is well suited to be used in combination with the
+ existing code and language features, such as all the choice elements, as
+ state values are just normal values.