X-Git-Url: https://git.martlubbers.net/?a=blobdiff_plain;f=mtask.io.tex;h=2fc83fb6681335ac0692a615e3593ad8578ac597;hb=9b3d5ac89173801dffb60470b86a61390c4ab68d;hp=b896da05a5142d162cea4a24071115017421408c;hpb=5f16025bb38f5ecfc037a1614819658efed63b13;p=msc-thesis1617.git diff --git a/mtask.io.tex b/mtask.io.tex index b896da0..2fc83fb 100644 --- a/mtask.io.tex +++ b/mtask.io.tex @@ -8,34 +8,35 @@ assignable entity. \begin{lstlisting}[% 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}[% label={lst:sdsclass},caption={\glspl{SDS} in \gls{mTask}}] @@ -43,38 +44,9 @@ and decorations such as \glspl{SDS}. :: 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}