instances such as \CI{iTasks}. Tailor-made instances for these functions have
been made.
-\begin{lstlisting}[label={lst:bcview},caption={Bytecode view}]
+\begin{lstlisting}[language=Clean,label={lst:bcview},caption={Bytecode view}]
:: ByteCode a p = BC (RWS () [BC] BCState ())
:: BCValue = E.e: BCValue e & mTaskType, TC e
:: BCShare =
program memory addresses in the final step of compilation to save instructions
and avoid label lookups at runtime.
-\begin{lstlisting}[label={bc:instr},%
+\begin{lstlisting}[language=Clean,label={bc:instr},%
caption={Bytecode instruction set}]
:: BC = BCNop
| BCLab Int | BCPush BCValue | BCPop
\CI{tell`} function is a wrapper around the \gls{RWST} function \CI{tell} that
appends the argument to the \emph{Writer} value.
-\begin{lstlisting}[label={lst:helpers},caption={Some helper functions}]
+\begin{lstlisting}[language=Clean,label={lst:helpers},caption={Some helper functions}]
op2 :: (ByteCode a p1) (ByteCode a p2) BC -> ByteCode b Expr
op2 (BC x) (BC y) bc = BC (x >>| y >>| tell [bc])
\CI{boolExpr} class and the classes for the peripherals are implemented using
the same strategy.
-\begin{lstlisting}[label={lst:arithview},caption={%
+\begin{lstlisting}[language=Clean,label={lst:arithview},caption={%
Bytecode view implementation for arithmetic and peripheral classes}]
instance arith ByteCode where
lit x = tell` [BCPush (BCValue x)]
that multiple labels appear consecutively in the code. This is not a problem
since the labels are resolved to real addresses later on anyway.
-\begin{lstlisting}[label={lst:controlflow},%
+\begin{lstlisting}[language=Clean,label={lst:controlflow},%
caption={Bytecode view for the \texttt{IF} class}]
freshlabel = get >>= \st=:{freshl}->put {st & freshl=freshl+1} >>| tell freshl
execution. Listing~\ref{lst:return} shows the classes and implementation for
the return expression.
-\begin{lstlisting}[label={lst:return},%
+\begin{lstlisting}[language=Clean,label={lst:return},%
caption={Bytecode view for the return instruction}]
class retrn v where
retrn :: v () Expr
the \CI{namedsds} class is exactly the same other than that it stores the given
name in the \CI{BCShare} structure as well.
-\begin{lstlisting}[label={lst:shareview},%
+\begin{lstlisting}[language=Clean,label={lst:shareview},%
caption={Bytecode view for \texttt{arith}}]
freshshare = get >>= \st=:{freshs}->put {st & freshs=freshs+1} >>| pure freshs
\CI{BCSdsStore} or \CI{BCAnalogWrite} instruction respectively. The
implementation for this is given in Listing~\ref{lst:assignmentview}.
-\begin{lstlisting}[label={lst:assignmentview},%
+\begin{lstlisting}[language=Clean,label={lst:assignmentview},%
caption={Bytecode view implementation for assignment.}]
instance assign ByteCode where
(=.) (BC v) (BC e) = BC (e >>| censor makeStore v)
converting the bytecode and \glspl{SDS} to actual messages ready to send to the
client.
-\begin{lstlisting}[label={lst:compilation},%
+\begin{lstlisting}[language=Clean,label={lst:compilation},%
caption={Actual compilation.}]
bclength :: BC -> Int
bclength (BCPush s) = 1 + size (toByteCode s)