Merge branch 'master' of git.martlubbers.net:msc-thesis1617
[msc-thesis1617.git] / mtask.io.tex
index b896da0..a0aec0a 100644 (file)
@@ -5,76 +5,48 @@ extensions can be created for specific peripherals such as built-in
 Listing~\ref{lst:sdsio}. In this way the assignment is the same for every
 assignable entity.
 
-\begin{lstlisting}[%
+\begin{lstlisting}[language=Clean,%
        label={lst:sdsio},caption={Input/Output classes}]
 :: DigitalPin = D0 | D1 | D2 | D3 | D4 | D5 |D6 | D7 | D8 | D9 | D10 | D11 | D12 | D13
-:: AnalogPin  = A0 | A1 | A2 | A3 | A4 | A5
+:: AnalogPin   = A0 | A1 | A2 | A3 | A4 | A5
 :: UserLED = LED1 | LED2 | LED3
 
 class dIO v where dIO :: DigitalPin -> v Bool Upd
 class aIO v where aIO :: AnalogPin -> v Int Upd
 class analogRead v where
-  analogRead :: AnalogPin -> v Int Expr
-  analogWrite :: AnalogPin (v Int p) -> v Int Expr
+       analogRead :: AnalogPin -> v Int Expr
+       analogWrite :: AnalogPin (v Int p) -> v Int Expr
 class digitalRead v where
-  digitalRead :: DigitalPin -> v Bin Expr
-  digitalWrite :: DigitalPin (v Bool p) -> v Int Expr
+       digitalRead :: DigitalPin -> v Bin Expr
+       digitalWrite :: DigitalPin (v Bool p) -> v Int Expr
 
 :: UserLED = LED1 | LED2 | LED3
 class userLed v where
-  ledOn  :: (v UserLED q) -> (v () Stmt)
-  ledOff :: (v UserLED q) -> (v () Stmt)
+       ledOn   :: (v UserLED q) -> (v () Stmt)
+       ledOff :: (v UserLED q) -> (v () Stmt)
 
 class assign v where
-  (=.) infixr 2 :: (v t Upd) (v t p) -> v t Expr | ...
+       (=.) infixr 2 :: (v t Upd) (v t p) -> v t Expr | ...
 \end{lstlisting}
 
 One way of storing data in \gls{mTask}-\glspl{Task} is using \glspl{SDS}.
-\glspl{SDS} serve as variables in \gls{mTask} and maintain their value across
-executions.  \glspl{SDS} can be used by multiple \glspl{Task} and can be used
-to share data. The classes associated with \glspl{SDS} are listed in
+\glspl{SDS} serve as global variables in \gls{mTask} and maintain their value
+across executions. \glspl{SDS} can be used by multiple \glspl{Task} and can be
+used to share data. The classes associated with \glspl{SDS} are listed in
 Listing~\ref{lst:sdsclass}. The \CI{Main} type is introduced to box an
 \gls{mTask} and make it recognizable by the type system by separating programs
-and decorations such as \glspl{SDS}.
+and decorations such as \glspl{SDS}. The type signature is complex and uses
+infix type constructors and therefore, an implementation example is also given.
 
-\begin{lstlisting}[%
+\begin{lstlisting}[language=Clean,%
        label={lst:sdsclass},caption={\glspl{SDS} in \gls{mTask}}]
 :: In a b = In infix 0 a b
 :: Main a = {main :: a}
 
 class sds v where
-  sds :: ((v t Upd)->In t (Main (v c s))) -> (Main (v c s)) | ...
-\end{lstlisting}
-
-In the \emph{Arduino} ecosystem, shields are available to plug into the
-microcontroller and add functionality. These shields range from Bluetooth,
-WiFi, Ethernet, LoRa, LCD screens and much more. Often the functionality
-available in these shields is housed in a \gls{C++} class. This functionality
-is ported using little work to \gls{mTask} by just creating a corresponding
-class with the same functions. As an example, Listing~\ref{lst:lcd} shows parts
-of the \gls{LCD} class as an \gls{mTask} class functions and as
-Listing~\ref{lst:lcdc} shown the corresponding \emph{Arduino} class functions.
-
-\begin{lstlisting}[label={lst:lcd},%
-       caption={Adding the \gls{LCD} to the \gls{mTask} language}]
-:: LCD = ...
-
-class lcd v where
-  begin          :: (v LCD Expr) (v Int p) (v Int q) -> v () Expr
-  ...
-  scrollLeft     :: (v LCD Expr) -> v () Expr
-  scrollRight    :: (v LCD Expr) -> v () Expr
-  ...
-\end{lstlisting}
+       sds :: ((v t Upd) -> In t (Main (v c s))) -> (Main (v c s)) | ...
 
-\begin{lstlisting}[language=C++,label={lst:lcdc},%
-       caption={Functions from the \gls{Arduino} \gls{LCD} library}]
-class LiquidCrystal {
-public:
-  void begin(uint8_t cols, uint8_t rows);
-  ...
-  void scrollDisplayLeft();
-  void scrollDisplayRight();
-  ...
-}
+sdsExample :: Main (v Int Stmt)
+sdsExample = sds \x.0 In
+       {main= x =. x +. lit 42 }
 \end{lstlisting}