- In the following sections, we will be using a number of functions and
- notations, which we will define here.
-
- \subsubsection{Concepts}
- A \emph{global variable} is any variable (binder) that is bound at the
- top level of a program, or an external module. A \emph{local variable} is any
- other variable (\eg, variables local to a function, which can be bound by
- lambda abstractions, let expressions and pattern matches of case
- alternatives). Note that this is a slightly different notion of global versus
- local than what \small{GHC} uses internally.
- \defref{global variable} \defref{local variable}
-
- A \emph{hardware representable} (or just \emph{representable}) type or value
- is (a value of) a type that we can generate a signal for in hardware. For
- example, a bit, a vector of bits, a 32 bit unsigned word, etc. Values that are
- not runtime representable notably include (but are not limited to): Types,
- dictionaries, functions.
- \defref{representable}
-
- A \emph{builtin function} is a function supplied by the Cλash framework, whose
- implementation is not valid Cλash. The implementation is of course valid
- Haskell, for simulation, but it is not expressable in Cλash.
- \defref{builtin function} \defref{user-defined function}
-
- For these functions, Cλash has a \emph{builtin hardware translation}, so calls
+ A \emph{global variable} is any variable (binder) that is bound at the
+ top level of a program, or an external module. A \emph{local variable} is any
+ other variable (\eg, variables local to a function, which can be bound by
+ lambda abstractions, let expressions and pattern matches of case
+ alternatives). This is a slightly different notion of global versus
+ local than what \small{GHC} uses internally, but for our purposes
+ the distinction \GHC makes is not useful.
+ \defref{global variable} \defref{local variable}
+
+ A \emph{hardware representable} (or just \emph{representable}) type or value
+ is (a value of) a type that we can generate a signal for in hardware. For
+ example, a bit, a vector of bits, a 32 bit unsigned word, etc. Values that are
+ not runtime representable notably include (but are not limited to): Types,
+ dictionaries, functions.
+ \defref{representable}
+
+ A \emph{built-in function} is a function supplied by the Cλash framework, whose
+ implementation is not valid Cλash. The implementation is of course valid
+ Haskell, for simulation, but it is not expressable in Cλash.
+ \defref{built-in function} \defref{user-defined function}
+
+ For these functions, Cλash has a \emph{built-in hardware translation}, so calls