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
  LCD         :: Int Int [DigitalPin] ((v LCD Expr) -> Main (v b q)) -> Main (v b q)
  ...
  scrollLeft  :: (v LCD Expr) -> v () Expr
  scrollRight :: (v LCD Expr) -> v () Expr
  ...
\end{lstlisting}

\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();
  ...
}
\end{lstlisting}
