X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=methods.mtask.tex;h=67f4b4e264522312dc5ee6ecbf54c08638e8957e;hb=7ca87066ed1f3a962d993a9ac32ab761cfdc05a9;hp=5bdbbb1db3f162006b9b9e7da5462820718364b5;hpb=435b0d98d22a47530f50ff82f2451e70ce2bed96;p=msc-thesis1617.git diff --git a/methods.mtask.tex b/methods.mtask.tex index 5bdbbb1..67f4b4e 100644 --- a/methods.mtask.tex +++ b/methods.mtask.tex @@ -68,15 +68,23 @@ as \emph{while} or \emph{for} constructions. The main control flow operators are the sequence operator and the \emph{if} statement. Both are shown in Listing~\ref{lst:control}. The first class of \emph{If} statements describes the regular \emph{if} statement. The expressions given can have any role. The -functional dependency\todo{explain} on \CI{s} determines the return type of the -statement. The sequence operator is very straightforward and just ties the two -expressions together in sequence. +functional dependency on \CI{s} determines the return type of the +statement. The listing includes examples of implementations that illustrate +this dependency. + +The sequence operator is very straightforward and just ties +the two expressions together in sequence. \begin{lstlisting}[% language=Clean,label={lst:control},caption={Control flow operators}] class If v q r ~s where If :: (v Bool p) (v t q) (v t r) -> v t s | ... +instance If Code Stmt Stmt Stmt +instance If Code e Stmt Stmt +instance If Code Stmt e Stmt +instance If Code x y Expr + class seq v where (:.) infixr 0 :: (v t p) (v u q) -> v u Stmt | ... \end{lstlisting} @@ -84,9 +92,9 @@ class seq v where \section{Input/Output and class extensions} Values can be assigned to all expressions that have an \CI{Upd} role. Examples of such expressions are \glspl{SDS} and \gls{GPIO} pins. Moreover, class -extensions can be created for specific peripherals such as builtin LEDs. The -classes facilitating this are shown in Listing~\ref{lst:sdsio}. In this way the -assignment is the same for every assignable entity. +extensions can be created for specific peripherals such as builtin \glspl{LED}. +The classes facilitating this are shown in Listing~\ref{lst:sdsio}. In this way +the assignment is the same for every assignable entity. \begin{lstlisting}[% language=Clean,label={lst:sdsio},caption={Input/Output classes}] @@ -172,7 +180,7 @@ To achieve this in the \gls{EDSL} a \gls{Task} clas are added that work in a similar fashion as the \texttt{sds} class. This class is listed in Listing~\ref{lst:taskclass}. \glspl{Task} can have an argument and always have to specify a delay or waiting time. The type signature of the \CI{mtask} is -rather arcane and therefore an example is given. The aforementioned Listing +complex and therefore an example is given. The aforementioned Listing shows a simple specification containing one task that increments a value indefinitely every one seconds. @@ -189,10 +197,10 @@ Some example \glspl{mTask} using almost all of the functionality are shown in Listing~\ref{lst:exmtask}. The \glspl{mTask} shown in the example do not belong to a particular view and therefore are of the type \CI{View t r}. The \CI{blink} \gls{mTask} show the classic \gls{Arduino} \emph{Hello World!} -application that blinks a certain LED every second. The \CI{thermostat} -expression will enable a digital pin powering a cooling fan when the analog -pin representing a temperature sensor is too high. \CI{thermostat`} shows the -same expression but now using the assignment style \gls{GPIO} technique. +application that blinks a certain \gls{LED} every second. The \CI{thermostat} +expression will enable a digital pin powering a cooling fan when the analog pin +representing a temperature sensor is too high. \CI{thermostat`} shows the same +expression but now using the assignment style \gls{GPIO} technique. \begin{lstlisting}[% language=Clean,label={lst:exmtask},caption={Some example \glspl{mTask}}]