However, this requires a very specific adapter to be written for every device
and function. This forces a fixed logic in the device that is set at compile
time. Many small \gls{IoT} devices have limited processing power but are still
-powerfull enough for decision making. Recompiling the code for a small
+powerful enough for decision making. Recompiling the code for a small
\gls{IoT} device is expensive and therefore it is difficult to use a device
dynamically for multiple purposes. Oortgiese et al.\ lifted \gls{iTasks} from a
single server model to a distributed server architecture that is also runnable
several \gls{Haskell} extensions that offer dependent type constructions. The
process of compiling an \gls{Ivory} program happens in stages. The embedded
code is transformed into an \gls{AST} that is sent to a backend. In the new
-system, the \gls{mTask} \gls{EDSL} transforms the embedded code during
+system, the \gls{mTask}-\gls{EDSL} transforms the embedded code during
compile-time directly into the backend which is often a state transformer that
will execute on runtime.