-subsequently translate into VHDL easily. This normal form is needed because
-the full core language is more expressive than VHDL in some areas and because
+subsequently translate into \small{VHDL} easily. This normal form is needed because
+the full core language is more expressive than \small{VHDL} in some areas and because
-TODO: Describe core properties not supported in VHDL, and describe how the
-VHDL we want to generate should look like.
+TODO: Describe core properties not supported in \small{VHDL}, and describe how the
+\small{VHDL} we want to generate should look like.
generate a hardware signal that contains a function, so all values,
arguments and returns values used must be first order.
generate a hardware signal that contains a function, so all values,
arguments and returns values used must be first order.
description, every signal is in a single scope. Also, full expressions are
not supported everywhere (in particular port maps can only map signal names,
description, every signal is in a single scope. Also, full expressions are
not supported everywhere (in particular port maps can only map signal names,
define a component instantiation, where the input and output ports are mapped
to local signals or arguments. Some of the others use a builtin
construction (\eg the \lam{case} statement) or call a builtin function
define a component instantiation, where the input and output ports are mapped
to local signals or arguments. Some of the others use a builtin
construction (\eg the \lam{case} statement) or call a builtin function
This transformation inlines simple let bindings (\eg a = b).
This transformation is not needed to get into normal form, but makes the
This transformation inlines simple let bindings (\eg a = b).
This transformation is not needed to get into normal form, but makes the
(since ununsed bindings are not forbidden by the normal form), but in practice
the desugarer or simplifier emits some unused bindings that cannot be
normalized (e.g., calls to a \type{PatError} (TODO: Check this name)). Also,
(since ununsed bindings are not forbidden by the normal form), but in practice
the desugarer or simplifier emits some unused bindings that cannot be
normalized (e.g., calls to a \type{PatError} (TODO: Check this name)). Also,
These arguments cannot be preserved in the program, since we
cannot represent them as input or output ports in the resulting
These arguments cannot be preserved in the program, since we
cannot represent them as input or output ports in the resulting
\subsubsection{Argument simplification}
This transform deals with arguments to functions that
are of a runtime representable type. It ensures that they will all become
\subsubsection{Argument simplification}
This transform deals with arguments to functions that
are of a runtime representable type. It ensures that they will all become
TODO: It seems we can map an expression to a port, not only a signal.
Perhaps this makes this transformation not needed?
TODO: It seems we can map an expression to a port, not only a signal.
Perhaps this makes this transformation not needed?
This transformation is useful when applying higher order builtin functions
like \hs{map} to a lambda abstraction, for example. In this case, the code
This transformation is useful when applying higher order builtin functions
like \hs{map} to a lambda abstraction, for example. In this case, the code
partial applications, not any other expression (such as lambda abstractions or
even more complicated expressions).
partial applications, not any other expression (such as lambda abstractions or
even more complicated expressions).