better structure with subfiles
authorMart Lubbers <mart@martlubbers.net>
Wed, 13 Apr 2022 14:59:46 +0000 (16:59 +0200)
committerMart Lubbers <mart@martlubbers.net>
Wed, 13 Apr 2022 14:59:46 +0000 (16:59 +0200)
59 files changed:
abstract.tex [deleted file]
appendix/.chktexrc [new file with mode: 0644]
appendix/clean_for_haskell_programmers.tex
appendix/latexmkrc [new symlink]
appendix/lst/.gitignore [new file with mode: 0644]
appendix/lst/Makefile [moved from lst/Makefile with 75% similarity]
appendix/lst/example_deep.hs [moved from lst/example_deep.hs with 100% similarity]
appendix/lst/expr_gadt.hs [moved from lst/expr_gadt.hs with 100% similarity]
appendix/lst/expr_gadt.icl [moved from lst/expr_gadt.icl with 94% similarity]
appendix/lst/generic_eq.icl [moved from lst/generic_eq.icl with 100% similarity]
appendix/lst/generic_print.icl [new file with mode: 0644]
backmatter/acknowledgements.tex [moved from acknowledgements.tex with 70% similarity]
backmatter/curriculum_vitae.tex [moved from curriculum_vitae.tex with 79% similarity]
backmatter/research_data_management.tex [new file with mode: 0644]
backmatter/samenvatting.tex [new file with mode: 0644]
backmatter/summary.tex [new file with mode: 0644]
compile.sh [new file with mode: 0755]
compile_separate_chapters.sh [new file with mode: 0755]
dedication.tex [deleted file]
domain_specific_languages.tex [deleted file]
domain_specific_languages/class_deep_embedding.tex [new file with mode: 0644]
domain_specific_languages/dsl_techniques.tex
domain_specific_languages/first-class_datatypes.tex [new file with mode: 0644]
frontmatter/dedication.tex [new file with mode: 0644]
frontmatter/motto.tex [moved from motto.tex with 58% similarity]
frontmatter/titlepage.tex [moved from titlepage.tex with 92% similarity]
glossaries.tex
internet_of_things.tex [deleted file]
introduction/hyponymy_of_dsls.tex [new file with mode: 0644]
introduction/introduction.tex [moved from introduction.tex with 54% similarity]
introduction/iot-layers.tex [new file with mode: 0644]
introduction/tosd.tex [new file with mode: 0644]
introduction/traditional.tex [new file with mode: 0644]
latexmkrc
lst/Clean System Files/expr_gadt.abc [deleted file]
lst/Clean System Files/expr_gadt.o [deleted file]
lst/Clean System Files/generic_eq.abc [deleted file]
lst/Clean System Files/generic_eq.o [deleted file]
lst/Clean System Files/generic_print.abc [deleted file]
lst/Clean System Files/generic_print.o [deleted file]
lst/expr_gadt [deleted file]
lst/generic_eq [deleted file]
lst/generic_print [deleted file]
lst/generic_print.icl [deleted file]
lstlangclean.sty [new file with mode: 0644]
lstlanghaskell.sty [new file with mode: 0644]
preamble.tex
research_data_management.tex [deleted file]
samenvatting.tex [deleted file]
subfilepostamble.tex [new file with mode: 0644]
summary.tex [deleted file]
task_oriented_programming.tex [deleted file]
task_oriented_programming/integration.tex [new file with mode: 0644]
task_oriented_programming/interpreting.tex [new file with mode: 0644]
task_oriented_programming/mtask.tex [new file with mode: 0644]
task_oriented_programming/mtask_by_example.tex [new file with mode: 0644]
thesis.bib
thesis.tex
tiered_vs._tierless_programming/smart_campus.tex [new file with mode: 0644]

diff --git a/abstract.tex b/abstract.tex
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/appendix/.chktexrc b/appendix/.chktexrc
new file mode 100644 (file)
index 0000000..a7c8d73
--- /dev/null
@@ -0,0 +1,19 @@
+CmdLine {
+       -v
+}
+VerbEnvir {
+       lstinline lstlisting algorithm code spec lstClean lstHaskell
+}
+WipeArg {
+       \cleaninline:{}
+       \haskellinline:{}
+       \texttt:{}
+       \url:{}
+       \only:{}
+}
+Silent {
+       \pause
+}
+MathEnvir {
+       code
+}
index 715964c..f07bc6b 100644 (file)
@@ -1,5 +1,33 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+
+\ifSubfilesClassLoaded{
+       \pagenumbering{arabic}
+       \author{Mart Lubbers\and Peter Achten}
+       \title{Clean for Haskell Programmers}
+       \date{\today}
+
+       \stopthumb{}%
+       \setcounter{chapter}{1}
+
+       {
+               \let\clearpage\relax
+               \let\vfil\relax
+               \let\cleardoublepage\relax
+               \let\newpage\relax
+               \maketitle
+               \tableofcontents
+       }
+
+}{
+       \chapter{\glsentrytext{CLEAN} for \glsentrytext{HASKELL} Programmers}%
+       \label{chp:clean_for_haskell_programmers}
+}
+
 While \gls{CLEAN} and \gls{HASKELL} were both conceived around 1987 and have similar syntax, there are some subtle differences in syntax and functionality.
-This section describes some of the history of \gls{CLEAN} and provides a crash course in \gls{CLEAN} pecularities writen for \gls{HASKELL} programmers.
+This section describes some of the history of \gls{CLEAN} and provides a crash course in \gls{CLEAN} pecularities written for \gls{HASKELL} programmers.
+It is based on the 
 
 \Gls{CLEAN}---acronym for Clean \acrlong{LEAN}~\cite{barendregt_towards_1987}---, was originally designed as a \gls{GRS} core language but quickly served as an intermediate language for other functional languages~\cite{brus_clean_1987}.
 In the early days it has also been called \emph{Concurrent} \gls{CLEAN}~\cite{nocker_concurrent_1991} but these days the language has no support for this anymore.
@@ -10,7 +38,7 @@ However, over the years, the syntax got friendlier and it currently it looks a l
 In the past, a \emph{double-edged} fronted even existed that allowed \gls{CLEAN} to be extended with \gls{HASKELL98} syntax and vice versa, however this frontend is no longer maintained~\cite{groningen_exchanging_2010}.
 This chapter therefore gives a brief syntactical and functional comparison, a complete specification of the \gls{CLEAN} language can be found in the latest language report~\cite{plasmeijer_clean_2021}.
 Many of this is based on work by Achten although that was based on \gls{CLEAN} 2.1 and \gls{HASKELL98}~\cite{achten_clean_2007}.
-When \gls{HASKELL} is mentioned I actually mean \gls{GHC}'s \gls{HASKELL} and by \gls{CLEAN} I mean \gls{CLEAN} 3.1's \gls{ITASK} compiler.
+When \gls{HASKELL} is mentioned we actually mean \gls{GHC}'s \gls{HASKELL} and by \gls{CLEAN} we mean \gls{CLEAN} 3.1's \gls{ITASK} compiler.
 
 \section{Features}
 \subsection{Modules}
@@ -41,7 +69,7 @@ Finally, using \cleaninline{.} (a dot), it is possible to state that several var
 Uniqueness is propagated automatically in function types but must be marked manually in data types.
 Examples can be seen in \cref{lst:unique_examples}.
 
-\begin{lstClean}[label={lst:unique_examples},caption={Examples of uniqueness annotations}]
+\begin{lstClean}[label={lst:unique_examples},caption={Examples of uniqueness annotations in \gls{CLEAN}.}]
 f :: *a -> *a                // f works on unique values only
 f :: .a -> .a                // f works on unique and non-unique values
 f :: v:a u:b -> u:b, [v<=u]  // f works when a is less unique than b
@@ -57,12 +85,13 @@ f :: v:a u:b -> u:b, [v<=u]  // f works when a is less unique than b
 
 \subsection{Generics}
 Polytypic functions~\cite{jeuring_polytypic_1996}---also known as generic or kind-indexed fuctions---are built into \gls{CLEAN}~\cite[Chp.~7.1]{plasmeijer_clean_2021}\cite{alimarine_generic_2005} whereas in \gls{HASKELL} they are implemented as a library~\cite[Chp.~6.19.1]{ghc_team_ghc_2021}.
+The implementation of generics in \gls{CLEAN} is very similar to that of Generic H$\forall$skell~\cite{hinze_generic_2003}.
 %When calling a generic function, the kind must always be specified and depending on the kind, the function may require more arguments.
 
 For example, defining a generic equality is done as in \cref{lst:generic_eq}.
 \lstinputlisting[language=Clean,firstline=4,label={lst:generic_eq},caption={Generic equality function in \gls{CLEAN}.}.]{lst/generic_eq.icl}
 
-Metadata about the types is available using the \cleaninline{of} syntax that gives the function access to metadata records, as can be seen in \cref{lst:generic_print} showing a generic print function. This abundance of metadata allows for very complex generic functions that near the expression level of template metaprogramming\todo[inline]{crossref chapter c-code generation}.
+Metadata about the types is available using the \cleaninline{of} syntax that gives the function access to metadata records, as can be seen in \cref{lst:generic_print} showing a generic print function. This abundance of metadata allows for very complex generic functions that near the expression level of template metaprogramming\ifSubfilesClassLoaded{}{ (See \cref{chp:first-class_datatypes})}.
 \lstinputlisting[language=Clean,firstline=4,label={lst:generic_print},caption={Generic print function in \gls{CLEAN}.}]{lst/generic_print.icl}
 
 \subsection{\glsentrytext{GADT}s}
@@ -107,9 +136,9 @@ To illustrate this, \cref{lst:gadt_clean} shows an example \gls{GADT} that would
        \cleaninline{True :: Bool} & \haskellinline{True :: Bool}\\
        \cleaninline{toInteger 42 :: Integer} & \haskellinline{42 :: Integer}\\
        \cleaninline{38.0 :: Real} & \haskellinline{38.0 :: Float -- or Double}\\
-       \cleaninline{"Hello" +++ "World" :: String}\footnote{Strings are represented as unboxed character arrays.}
-               & \haskellinline{"Hello" ++ "World" :: String}\footnote{Strings are represented as lists of characters by default but may be overloaded as well if \GHCmod{OverloadedStrings} is enabled.}\\
-       \cleaninline{['Hello'] :: [Char]} & \haskellinline{"Hello" :: String}\\
+       \cleaninline{\"Hello\" +++ \"World\" :: String}\footnote{Strings are represented as unboxed character arrays.}
+               & \haskellinline{\"Hello\" ++ \"World\" :: String}\footnote{Strings are represented as lists of characters by default but may be overloaded as well if \GHCmod{OverloadedStrings} is enabled.}\\
+       \cleaninline{['Hello'] :: [Char]} & \haskellinline{\"Hello\" :: String}\\
        \cleaninline{?t} & \haskellinline{Maybe t}\\
        \cleaninline{(?None, ?Just e)} & \haskellinline{(Nothing, Just e)}\\
 
@@ -122,7 +151,7 @@ To illustrate this, \cref{lst:gadt_clean} shows an example \gls{GADT} that would
        \cleaninline{:: T a0 ...} & \haskellinline{data T a0 ...}\\
        \quad\cleaninline{= \{ f0 :: t0, ..., fn :: tn \} } & \quad\haskellinline{= T \{ f0 :: t0, ..., fn :: tn \} }\\
        \cleaninline{:: T a0 ... =: t} & \haskellinline{newtype T a0 ... = t}\\
-       \cleaninline{:: T = E.t Box t \& C t} & \haskellinline{data T = forall t.C t => Box t}\requiresGHCmod{ExistentialQuantification}\\
+       \cleaninline{:: T = E.t: Box t \& C t} & \haskellinline{data T = forall t.C t => Box t}\requiresGHCmod{ExistentialQuantification}\\
 
        \midrule
        \multicolumn{2}{c}{Function types}\\
@@ -220,3 +249,5 @@ To illustrate this, \cref{lst:gadt_clean} shows an example \gls{GADT} that would
        \bottomrule
 \end{longtable}
 
+\input{subfilepostamble}
+\end{document}
diff --git a/appendix/latexmkrc b/appendix/latexmkrc
new file mode 120000 (symlink)
index 0000000..bd9970a
--- /dev/null
@@ -0,0 +1 @@
+../latexmkrc
\ No newline at end of file
diff --git a/appendix/lst/.gitignore b/appendix/lst/.gitignore
new file mode 100644 (file)
index 0000000..109b14a
--- /dev/null
@@ -0,0 +1,7 @@
+Clean System Files
+*.o
+*.hi
+
+expr_gadt
+generic_eq
+generic_print
similarity index 75%
rename from lst/Makefile
rename to appendix/lst/Makefile
index 583bda6..bc32723 100644 (file)
@@ -1,7 +1,7 @@
 CLM?=clm
 CLMFLAGS?=-b
 
-BINARIES:=generic_eq generic_print
+BINARIES:=generic_eq generic_print expr_gadt
 
 all: $(BINARIES)
 
similarity index 100%
rename from lst/expr_gadt.hs
rename to appendix/lst/expr_gadt.hs
similarity index 94%
rename from lst/expr_gadt.icl
rename to appendix/lst/expr_gadt.icl
index 69763b0..ccf9614 100644 (file)
@@ -3,7 +3,7 @@ import StdEnv
 
 :: BM a b = { ab :: a -> b, ba  :: b -> a }
 bm :: BM a a
-bm = {ab=id, ba=id, tab=id, tba=id}
+bm = {ab=id, ba=id}
 
 :: Expr a
        = E.e: Lit (BM a e) e                    & toString e
@@ -22,3 +22,5 @@ print :: (Expr a) -> String
 print (Lit _ e)   = toString e
 print (Add _ l r) = print l +++ "+" +++ print r
 print (Eq  _ l r) = print l +++ "==" +++ print r
+
+Start = 42
diff --git a/appendix/lst/generic_print.icl b/appendix/lst/generic_print.icl
new file mode 100644 (file)
index 0000000..ef13640
--- /dev/null
@@ -0,0 +1,26 @@
+module generic_print
+import StdEnv, StdGeneric
+
+generic gPrint a :: a [String] -> [String]
+
+gPrint{|Int|}           x         acc = [toString x:acc]
+gPrint{|Bool|}          x         acc = [toString x:acc]
+gPrint{|Real|}          x         acc = [toString x:acc]
+gPrint{|Char|}          x         acc = [toString x:acc]
+gPrint{|UNIT|}          x         acc = acc
+gPrint{|PAIR|}   fl fr (PAIR l r) acc = fl l [" ":fr r acc]
+gPrint{|EITHER|} fl _  (LEFT x)   acc = fl x acc
+gPrint{|EITHER|} _  fr (RIGHT x)  acc = fr x acc
+
+gPrint{|OBJECT|}        f     (OBJECT x) acc = f x acc
+gPrint{|CONS of gcd|}   f     (CONS x)   acc = ["(", gcd.gcd_name, " ":f x [")":acc]]
+gPrint{|RECORD of grd|} f     (RECORD x) acc = ["{", grd.grd_name, " | ":f x ["}":acc]]
+gPrint{|FIELD of gfd|}  f     (FIELD x)  acc = [pre, gfd.gfd_name, "=":f x acc]
+where
+       pre = if (gfd.gfd_index == 0) "" ", "
+
+:: T = {f1 :: Int, f2 :: (Real, [?Int])}
+derive gPrint (,), [], ?, T
+
+Start = gPrint{|*|} {f1=42, f2=(3.14, [?None])} []
+// {T | f1=42 , f2=(_Tuple2 3.14 (_Cons (_!None ) (_Nil )))}
similarity index 70%
rename from acknowledgements.tex
rename to backmatter/acknowledgements.tex
index 56c68f9..804daab 100644 (file)
@@ -1,18 +1,31 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{arabic}
+}{}
+\chapter{Acknowledgements}%
+\label{chp:acknowledgements}
+\begin{center}
+\noindent
 Funding: Teun de Groot, Ton van Heusden
 
 Supervisors: Pieter Koopman, Rinus Plasmeijer, Jan-Martin Jansen
 
 Colleagues: Jurriën Stutterheim, Laszlo Domoslai, Arjan Oortgiese, Bas Lijnse, Steffen Michels, Markus Klinik, Tim Steenvoorden, Camil Staps, Hans-Nikolai Vie\ss{}mann, John van Groningen, Sven-Bodo Scholz, Sjaak Smetsers, Fok Bolderheij, Simone Meeuwsen, Peter Achten
 
-Co-authors: Jeremy Singer, Phil Trinder, Adrian Ramsigh
+Co-authors: Jeremy Singer, Phil Trinder, Adrian Ramsingh
 
 \todo{Second assessor clients weglaten?: Willem, Dave, Gijs}
 Students: Matheus Amazonas Cabral de Andrade, Haye B\"ohm, Erin van der Veen, Colin de Roos, Willem de Vos, Michel de Boer, Dave Artz, Sjoerd Crooijmans, Gijs Alberts, Arjen Nederveen
 
 Mentors: Jos Baack, Francisco Torreira, Franc Grootjen, the late Louis Vuurpijl, Ralf Hinze
 
-Friends: Pieter Wolfert and Annerieke Wessels; Chris Kamphuis and Maudy Bijen; Koen Dercksen and Michelle Everard; George Gregoire; Larry Caruthers; Tim Hirschler.
+Friends: Pieter Wolfert and Annerieke Wessels; Chris Kamphuis and Maudy Bijen; Koen Dercksen and Michelle Everard; George Gregoire; Larry Caruthers; Tim Hirschler; Emma Dahl.
 
 Family: Parents (in law), brothers (in law), oma,
 
-Marie-José van Diem
+Marie-José van Diem, Elly Koopman
+\end{center}
+\input{subfilepostamble}
+\end{document}
similarity index 79%
rename from curriculum_vitae.tex
rename to backmatter/curriculum_vitae.tex
index 59beb0d..25ea235 100644 (file)
@@ -1,7 +1,16 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{arabic}
+}{}
+\chapter{Curriculum Vit\ae}%
+\label{chp:curriculum_vitae}
 Mart Lubbers
 
-\vspace{1\baselineskip}
+\vspace{\baselineskip}
 
+\noindent%
 \begin{tabular}{rp{.75\linewidth}}
        1992         & Born on the 27th of May, Oldenzaal\\
        2004{--}2011 & VWO at the Twents Carmelcollege De Thij, Oldenzaal\\
@@ -13,3 +22,6 @@ Mart Lubbers
        2018         & Researcher at the Radboud University, Nijmegen in the Institute for Computing and Information Sciences (iCIS).\\
        2018{--}2023 & PhD Candidate at the Radboud University, Nijmegen in the Institute for Computing and Information Sciences (iCIS).
 \end{tabular}
+
+\input{subfilepostamble}
+\end{document}
diff --git a/backmatter/research_data_management.tex b/backmatter/research_data_management.tex
new file mode 100644 (file)
index 0000000..53e2701
--- /dev/null
@@ -0,0 +1,45 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{arabic}
+}{}
+
+\chapter{Research Data Management}%
+\label{chp:research_data_management}
+
+This thesis research has been carried out under the research data management policy of the Institute for Computing and Information Science of Radboud University, the Netherlands\footnote{\url{https://www.ru.nl/icis/research-data-management/}, last accessed \formatdate{20}{1}{2020}.}.
+
+The following research datasets have been produced during this PhD research:
+\todo{reference correct chapters}
+\begin{itemize}
+       \item \ldots
+       \item \rdmentry{Chapter 0}
+               {\mlubbers; \pkoopman; \rplasmeijer}
+               {2021}
+               {Source code for the interpreted mTask language}
+               {DANS}{10.17026/dans-zrn-2wv3} %chktex 8
+       \item \rdmentry{Chapter 0}
+               {\mlubbers; \pkoopman; Ramsingh, A.\ (University of Glasgow); Singer, dr.\ J.\ (University of Glasgow); Trinder, prof.~dr.\ P.\ (University of Glasgow)}
+               {2021}
+               {Source code of the PRSS and CWSS applications}
+               {DANS}{10.17026/dans-zvf-4p9m} %chktex 8
+       \item \rdmentry{Chapter 0}
+               {\mlubbers; \pkoopman; \rplasmeijer}
+               {2020}
+               {Source code for the multitasking mTask language integrated with the iTask system}
+               {DANS}{10.17026/dans-x2y-rtxx} %chktex 8
+       \item \rdmentry{Chapter 0}
+               {\mlubbers; \pkoopman; \rplasmeijer}
+               {2020}
+               {Source code for a simplified mTask language integrated with the iTask system}
+               {DANS}{10.17026/dans-xv6-fvxd} %chktex 8
+       \item \rdmentry{Chapter 0}%
+               {\mlubbers; \pkoopman; \rplasmeijer}
+               {2020}
+               {Source code for the mTask language}
+               {DANS}{10.17026/dans-xx4-8zs9} %chktex 8
+\end{itemize}
+
+\input{subfilepostamble}
+\end{document}
diff --git a/backmatter/samenvatting.tex b/backmatter/samenvatting.tex
new file mode 100644 (file)
index 0000000..dab0c29
--- /dev/null
@@ -0,0 +1,18 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{arabic}
+}{}
+
+\chapter{Samenvatting}%
+\label{chp:samenvatting}
+\begin{center}
+
+\noindent%
+Dit is een samenvatting.
+
+\end{center}
+
+\input{subfilepostamble}
+\end{document}
diff --git a/backmatter/summary.tex b/backmatter/summary.tex
new file mode 100644 (file)
index 0000000..5657a67
--- /dev/null
@@ -0,0 +1,18 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{arabic}
+}{}
+
+\chapter{Summary}%
+\label{chp:summary}
+\begin{center}
+
+\noindent%
+This is a summary.
+
+\end{center}
+
+\input{subfilepostamble}
+\end{document}
diff --git a/compile.sh b/compile.sh
new file mode 100755 (executable)
index 0000000..e72fe70
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+latexmk "${@}" thesis
diff --git a/compile_separate_chapters.sh b/compile_separate_chapters.sh
new file mode 100755 (executable)
index 0000000..5e05c8b
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+find . -mindepth 2 -maxdepth 2 -not -path '*/.*' -name "*.tex" -print0\
+       | xargs -0tI{} -P$(nproc) latexmk -cd -pdf "${@}" {}
diff --git a/dedication.tex b/dedication.tex
deleted file mode 100644 (file)
index 1009e4c..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-\topskip0pt
-\vspace*{\fill}
-\begin{centering}
-       Voor Roos en Lotte
-\end{centering}
-\vspace*{\fill}
diff --git a/domain_specific_languages.tex b/domain_specific_languages.tex
deleted file mode 100644 (file)
index c9ead65..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-\chapter{\Glsentrytext{DSL} techniques}
-\input{domain_specific_languages/dsl_techniques.tex}
-
-\chapter{Tagless-final embedding}
-Dit kan ook een section zijn in de volgende chapter, maar toch lijkt het mij nuttig.
-
-\chapter{Classy deep embedding}%
-\label{chp:classy deep embedding}
-TFP22/pearl
-
-\chapter{First-class datatypes}
-TFP22
-
-\chapter{The \glsentrytext{MTASK} language}
-RWDSL paper\todo{mogelijk naar part twee?}
diff --git a/domain_specific_languages/class_deep_embedding.tex b/domain_specific_languages/class_deep_embedding.tex
new file mode 100644 (file)
index 0000000..3a60dc8
--- /dev/null
@@ -0,0 +1,13 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{arabic}
+}{}
+
+\chapter{Deep embedding with class}%
+\label{chp:classy deep embedding}
+TFP22 pearl.
+
+\input{subfilepostamble}
+\end{document}
index 1573236..9e0b402 100644 (file)
@@ -1,3 +1,11 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{arabic}
+}{}
+
+\chapter{DSL embedding techniques}
 An \gls{EDSL} is a language embedded in a host language created for a specific domain\todo{citation needed?}.
 \glspl{EDSL} can have one or more backends or views.
 Commonly used views are pretty printing, compiling, simulating, verifying and proving the program.
@@ -123,10 +131,13 @@ It is nearly impossible to add views to a shallowly embedded language.
 The only way of achieving this is by reimplementing all functions so that they run all backends at the same time.
 This will mean that every component will have to implement all views rendering it slow for multiple views and complex to implement.
 
-\subsection{\Acrlongpl{GADT}}
+\subsection{Generalised algebraic data types}
 
 \section{Shallow embedding}
 
 \subsection{Tagless-final embedding}
 
 \section{Comparison}
+
+\input{subfilepostamble}
+\end{document}
diff --git a/domain_specific_languages/first-class_datatypes.tex b/domain_specific_languages/first-class_datatypes.tex
new file mode 100644 (file)
index 0000000..6e36cf8
--- /dev/null
@@ -0,0 +1,13 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{arabic}
+}{}
+
+\chapter{First-class datatypes}%
+\label{chp:first-class_datatypes}
+TFP22
+
+\input{subfilepostamble}
+\end{document}
diff --git a/frontmatter/dedication.tex b/frontmatter/dedication.tex
new file mode 100644 (file)
index 0000000..c462cb2
--- /dev/null
@@ -0,0 +1,15 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{roman}
+}{}
+
+\topskip0pt
+\vspace*{\fill}
+\begin{centering}
+       Voor Roos en Lotte
+\end{centering}
+\vspace*{\fill}%
+
+\end{document}
similarity index 58%
rename from motto.tex
rename to frontmatter/motto.tex
index c2a866b..6f5c3d9 100644 (file)
--- a/motto.tex
@@ -1,3 +1,10 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{roman}
+}{}
+
 \topskip0pt
 \vspace*{\fill}
 \epigraph{%
@@ -6,9 +13,15 @@
        Howard Philip Lovecraft
 }
 \epigraph{%
-       Рукописи не горят\\(Manuscripts don't burn)
+       \selectlanguage{russian}
+       Рукописи не горят\\
+       \selectlanguage{british}
+       (Manuscripts don't burn)
 }{%
-       Михаил Афанасьевич Булгаков\\(Mikhail Afanesyevich Bulgakov)
+       \selectlanguage{russian}
+       Михаил Афанасьевич Булгаков\\
+       \selectlanguage{british}
+       (Mikhail Afanesyevich Bulgakov)
 }
 \epigraph{%
        You start a question, and it's like starting a stone.
@@ -25,4 +38,5 @@
 }{%
        Charles John Huffam Dickens
 }
-\vspace*{\fill}
+\vspace*{\fill}%
+\end{document}
similarity index 92%
rename from titlepage.tex
rename to frontmatter/titlepage.tex
index 0aa713f..535d798 100644 (file)
@@ -1,3 +1,10 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{roman}
+}{}
+
 %\hypersetup{pageanchor=false}
 \begin{titlepage}
        \begin{center}
@@ -55,7 +62,7 @@
 \end{itemize}
 
 \begin{itemize}[leftmargin=*]
-       \item[] Copromotor:
+       \item[] Copromotoren:
                \begin{itemize}
                        \item[] dr.\ P.W.M.\ Koopman
                        \item[] dr.\ J.M.\ Jansen
        }
 \end{minipage}%
 %\hypersetup{pageanchor=true}
+\end{document}
index 447a14c..0dd8fb5 100644 (file)
@@ -12,7 +12,7 @@
 \newacronym{LEAN}{LEAN}{language of East-Anglia and Nijmegen}
 \newacronym{TOP}{TOP}{task-oriented programming}
 \newacronym{TOSD}{TOSD}{task-oriented software development}
-\newacronym{TRS}{TRS}{graph rewriting system}
+\newacronym{TRS}{TRS}{term rewriting system}
 \newacronym{RFID}{RFID}{radio-frequency identification}
 \newacronym{SN}{SN}{sensor network}
 \newacronym{BLE}{BLE}{Bluetooth low energy}
@@ -22,6 +22,7 @@
 \newacronym{OTA}{OTA}{over-the-air}
 \newacronym{MCU}{MCU}{microcontroller unit}
 \newacronym{UI}{UI}{user interface}
+\newacronym{UOD}{UoD}{universe of discourse}
 \newacronym{SDS}{SDS}{shared data source}
 
 % Glossaries
diff --git a/internet_of_things.tex b/internet_of_things.tex
deleted file mode 100644 (file)
index 5cb6601..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-\chapter{\acrshort{TOP} versus traditional \acrshort{IOT} architectures}
-IOT2020 paper met Glasgow.
-
-TOPLAS paper met Glasgow.
-
-\chapter{Modelling naval scenaries using \acrshort{TOP} and \acrshort{IOT}}
-Arjan's werk {NLARMS}?
diff --git a/introduction/hyponymy_of_dsls.tex b/introduction/hyponymy_of_dsls.tex
new file mode 100644 (file)
index 0000000..f0f32d8
--- /dev/null
@@ -0,0 +1,15 @@
+\documentclass[tikz]{standalone}
+\usetikzlibrary{positioning}
+\begin{document}
+\begin{tikzpicture}[nodes={draw,minimum width=7.5em}]
+       \node (dsl)  {domain-specific language};
+       \node (sta) [below=of dsl,xshift=-3.75em] {standalone};
+       \node (emb) [right=of sta] {embedded};
+       \node (het) [below=of emb,xshift=-3.75em] {heterogeneous};
+       \node (hom) [right=of het] {homogeneous};
+       \draw [->] (dsl) -- (sta);
+       \draw [->] (dsl) -- (emb);
+       \draw [->] (emb) -- (het);
+       \draw [->] (emb) -- (hom);
+\end{tikzpicture}
+\end{document}
similarity index 54%
rename from introduction.tex
rename to introduction/introduction.tex
index 38579cd..9440d43 100644 (file)
@@ -1,59 +1,58 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{arabic}
+}{}
+\chapter{Introduction}%
+\label{chp:introduction}
 The sheer number of connected devices around us is increasing exponentially.
 First and foremost, these devices are driven by software.
 This thesis is about \ldots
 \todo[inline]{introduction}
 
-\section{\Acrlong{IOT}}
+\section{Internet of Things}
 \todo[inline]{add more citations and rewrite to make modern}
 The \gls{IOT} is growing rapidly and it is changing the way people and machines interact with the world.
-The term \gls{IOT} was coined around 1999 to describe the communication of \gls{RFID} devices.
-\gls{RFID} became more and more popular the years after but the term \gls{IOT} was not associated with it anymore.
-Years later, during the rise of novel network technologies, the term \gls{IOT} resurged with a slightly different meaning.
+While the term \gls{IOT} briefly gained interest around 1999 to describe the communication of \gls{RFID} devices~\cite{}, it probably already popped up halfway the eigthies in a speech by Peter T. Lewis~\cite{peter_t_lewis_speech_1985}.
+
+\begin{quote}
+       The \acrlong{IOT}, or \acrshort{IOT}, is the integration of people, processes and technology with connectable devices and sensors to enable remote monitoring, status, manipulation and evaluation of trends of such devices.
+\end{quote}
+
+CISCO states that the \gls{IOT} only started when there where as many connected devices as there were people on the globe, i.e.\ around 2008~\cite{evans_internet_2011}.
 Today, the \gls{IOT} is the term for a system of devices that sense the environment, act upon it and communicate with each other and the world.
-At the time of writing, there is about one connected device per person in the world of which many are part of an \gls{IOT} system.
-Gartner estimates that of these connected devices, there are about $5.8$ billion \gls{IOT} devices or endpoints connected~\footnote{Gartner (August 2019)}\todo[inline]{update with recent number}.
-They are already in everyone's household in the form of smart electricity meters, smart fridges, smartphones, smart watches, home automation and in the form of much more.
-While the number of devices seems to be growing exponentially fast, programming \gls{IOT} applications is difficult.
-The devices are a large heterogeneous collection of different platforms, protocols and languages resulting in impedance problems.
-
-The devices in \gls{IOT} systems are equipped with various sensors and actuators.
-These range from external ones such as positioning, temperature and humidity to more internal ones like heartbeat and respiration.
-When describing \gls{IOT} systems, a layered architecture is often used to compartmentalize the technology.
-For the intents and purposes of this paper the four layer architecture defined by ITU-T (International Telecommunications Union {-} Telecommunication Standardization Sector) will be used as visualized in Figure~\ref{fig:layers}.
-
-\begin{figure}
+These connected devices are already in everyone's household in the form of smart electricity meters, smart fridges, smartphones, smart watches, home automation, \etc.
+
+When describing \gls{IOT} systems, a layered, or tiered architecture is often used to compartmentalize the technology.
+The number of tiers heavily depends on the complexity of the model but for the intents and purposes of the thesis, the four layer architecture shown in \cref{fig:iot-layers} is used.
+
+\begin{figure}[ht]
        \centering
-       \begin{tikzpicture}[node distance=3em]
-               \node (1) [rectangle,draw,minimum width=10em] {Application Layer};
-               \node (2) [rectangle,draw,minimum width=10em,below of=1] {Support Laper};
-               \node (3) [rectangle,draw,minimum width=10em,below of=2] {Network Layer};
-               \node (4) [rectangle,draw,minimum width=10em,below of=3] {Perception Layer};
-
-               \draw [->] (1) -- (2);
-               \draw [->] (2) -- (1);
-               \draw [->] (2) -- (3);
-               \draw [->] (3) -- (2);
-               \draw [->] (3) -- (4);
-               \draw [->] (4) -- (3);
-       \end{tikzpicture}
-       \caption{The four layered \gls{IOT} architecture as described by the ITU-T.}%
-       \label{fig:layers}
+       \includestandalone{iot-layers}
+       \caption{The four layered \gls{IOT} architecture.}%
+       \label{fig:iot-layers}
 \end{figure}
 
-The first layer is called the perception layer and contains the actual endpoints with their peripherals.
-For example in home automation, the sensors reading the room and the actuators opening the curtains are in the perception layer.
-As a special type of device, it may also contain a \gls{SN}.
-A \gls{SN} is a collection of sensors connected by a mesh network or central hub.
-The network layer is the second layer and it consists of the hardware and software to connect the perception layer to the world.
-In home automation, this layer may consist of a specialized \gls{IOT} technology such as \gls{BLE} or ZigBee but it may also use existing technologies such as WiFi or wired connections.
-The third layer is named support layer and is responsible for the servicing and business rules surrounding the application.
-One of its goals is to provide the \gls{API}, interfaces and data storage.
-In home automation this provides the server storing the data.
-The fourth and final layer in this architecture is the application layer.
-The application layer provides the interaction between the user and the \gls{IOT} system.
-In home automation, this layer contains the apps for to read the measurements and control the devices.
-
-The perception layer often is a heterogeneous collections of microcontrollers, each having their own peculiarities, language of choice and hardware interfaces.
+\begin{description}
+       \item[Presentation layer] This presentation layer provides the interface between the user and the \gls{IOT} application.
+               For example, in home automation, this is often implemented as a web interface or a mobile app.
+       \item[Application layer]
+               Servers often power the application layer, by providing the data storage,
+               One of its goals is to provide the \gls{API}, interfaces and data storage
+       \item[Network layer] connects all layers together.
+               In many applications this may be implemented using conventional networking techniques such as WiFi or wire networks.
+               However, recently, networks tailored to the needs of \gls{IOT} applications have been increasingly popular such as \gls{BLE}, LoRa, ZigBee or LTE-M.
+       \item[Perception layer], also called edge layer, collects the data, interacts with the environment and consists of (edge) devices equipped with various sensors and actuators.
+               As a special type of device, it may also contain a \gls{SN}.
+               A \gls{SN} is a collection of sensors connected by a mesh network or central hub.
+\end{description}
+
+While the number of devices seems to be growing exponentially fast, programming \gls{IOT} systems remains difficult as there is a lot of semantic friction~\cite{ireland_classification_2009}.
+
+The devices are a large heterogeneous collection of different platforms, protocols and languages resulting in impedance problems or semantic friction between layers~\cite{ireland_classification_2009}.
+
+Additionaly, the perception layer often is a heterogeneous collections of microcontrollers as well, each having their own peculiarities, language of choice and hardware interfaces.
 The hardware needs to be cheap, small-scale and energy efficient.
 As a result, the \glspl{MCU} used to power these devices do not have a lot of computational power, a soup\c{c}on of memory, and little communication bandwidth.
 Typically the devices do not run a full fledged \gls{OS} but a compiled firmware.
@@ -65,31 +64,22 @@ The properties of the device greatly reduce the flexibility for dynamic systems
 These problems can be mitigated by dynamically sending code to be interpreted to the \gls{MCU}.
 With interpretation, a specialized interpreter is flashed in the program memory once that receives the program code to execute at runtime.
 
-\section{\Acrlongpl{DSL}}
+%weiser_computer_1991
+\section{Domain-specific languages}
 % General
-Programming languages can be divided up into two categories: \glspl{DSL} and \glspl{GPL}\todo{citation needed}.
+Programming languages can be divided up into two categories: \glspl{DSL} and \glspl{GPL}~\cite{fowler_domain_2010}.
 Where \glspl{GPL} are not made with a demarcated area in mind, \glspl{DSL} are tailor-made for a specific domain.
-Consequently, writing idiomatic domain-specific code is easy but this may come at the cost of the \gls{DSL} being less expressive to an extent that it may not even be Turing complete.
-\Glspl{DSL} come in two main flavours: standalone and embedded\footnote{Also called external and internal respectively~\cite{fowler_domain-specific_2010}} of which \glspl{EDSL} can again be classified into heterogeneous and homogeneous languages (see \cref{fig:taxonomy_of_dsls} for this taxonomy).
+Writing idiomatic domain-specific code in an \gls{DSL} is easy but this may come at the cost of the \gls{DSL} being less expressive to an extent that it may not even be Turing complete.
+\Glspl{DSL} come in two main flavours: standalone and embedded\footnote{Also called external and internal respectively.} of which \glspl{EDSL} can again be classified into heterogeneous and homogeneous languages (see \cref{fig:hyponymy_of_dsls} for this hyponymy).
 
 \begin{figure}[ht]
        \centering
-       \begin{tikzpicture}[nodes={draw,minimum width=7.5em}]
-               \node (dsl)  {\gls{DSL}};
-               \node (sta) [below=of dsl,xshift=-3.75em] {standalone};
-               \node (emb) [right=of sta] {embedded};
-               \node (het) [below=of emb,xshift=-3.75em] {heterogeneous};
-               \node (hom) [right=of het] {homogeneous};
-               \draw [->] (dsl) -- (sta);
-               \draw [->] (dsl) -- (emb);
-               \draw [->] (emb) -- (het);
-               \draw [->] (emb) -- (hom);
-       \end{tikzpicture}
-       \caption{Taxonomy of \glspl{DSL} (adapted from Verna~\cite[pg.\ 2]{mernik_extensible_2013})}%
-       \label{fig:taxonomy_of_dsls}
+       \includestandalone{hyponymy_of_dsls}
+       \caption{Hyponymy of \glspl{DSL} (adapted from~\cite[pg.\ 2]{mernik_extensible_2013})}%
+       \label{fig:hyponymy_of_dsls}
 \end{figure}
 
-DSLs where historically created as standalone languages which means all the machinery is developed solely for the language.
+\glspl{DSL} where historically created as standalone languages which means all the machinery is developed solely for the language.
 The advantage of this approach is that the language designer is free to define the syntax and type system of the language as they wish, not being restricted by any constraint.
 Unfortunately it also means that they need to develop a compiler or interpreter for the language to be usable making standalone \glspl{DSL} costly to create.
 Examples of standalone \glspl{DSL} are regular expressions, make, yacc, XML, SQL, \etc.
@@ -113,63 +103,59 @@ On the other hand, heterogeneous \glspl{EDSL} are languages that are not execute
 For example, Elliott et al.\ describe the language Pan, for which the final representation in the host language is a compiler that will, when executed, generate code for a completely different target platform~\cite{elliott_compiling_2003}.
 In fact, \gls{ITASK} and \gls{MTASK} are both heterogeneous \glspl{EDSL}.
 
-\section{\Acrlong{FP}}\label{ssec:functional programming}
+\section{Functional programming}\label{ssec:functional programming}
 \Gls{FP} is \ldots
 \Gls{FP} languages are naturally suitable as a host language for \gls{DSL} embedding because of their rich type systems and minimal and extensible syntax~\cite{gibbons_functional_2015}.
 
-\section{\Acrlong{TOP}}
+\section{Task-oriented programming}
 \Gls{TOP} is a declarative programming paradigm designed to model interactive systems~\cite{plasmeijer_task-oriented_2012}.
-Instead of dividing problems up into a layered approach it deals with separation of concerns in a novel way (see \cref{fig:tosd}).
-All components of a \gls{TOP} program are centered around the data types and from these datatypes, implementation details such as the interface, the communication and the sharing of data is generated.
+Instead of dividing problems into layers or tiers, as is done in \gls{IOT} architectures as well, it deals with separation of concerns in a novel way.
+From the data types, utilising various \emph{type-parametrised} concepts, all other aspects are handled (see \cref{fig:tosd}).
+This approach to software development is also called \gls{TOSD}~\cite{wang_maintaining_2018}.
+
+\begin{figure}[ht]
+       \centering
+       \begin{subfigure}[t]{.5\textwidth}
+               \centering
+               \includestandalone{traditional}
+               \caption{Traditional layered approach.}
+       \end{subfigure}%
+       \begin{subfigure}[t]{.5\textwidth}
+               \centering
+               \includestandalone{tosd}
+               \caption{\Gls{TOSD} approach.}
+       \end{subfigure}
+       \caption{Separation of concerns in a traditional setting and in \gls{TOSD} (adapted from~\cite[pg.\ 20]{wang_maintaining_2018}).}%
+       \label{fig:tosd}
+\end{figure}
+
 \begin{description}
-       \item[Data types]
-               In \gls{TOP}, everything is based around datatypes.
-       \item[Tasks]
+       \item[Presentation layer: UI]
+               The \gls{UI} of the system is automatically generated from the representation of the type.
+               For instance, \gls{TOP} languages implemented in an \gls{FP} language often use generic programming or template metaprogramming to automatically achieve this.
+               \Gls{TOP} languages embedded in imperative programming languages may use introspection\todo{Do I want this sentence here?}.
+               Even though the \gls{UI} is generated from the structure of the datatypes, in many practical \gls{TOP} systems it can be tweaked afterwards to suit the specific needs of the application.
+       \item[Business layer: Tasks]
                A task is an abstract representation of a piece of work that needs to be done.
                It provides an intuitive abstraction over work in the real world.
                Just as with real-life tasks and workflow, tasks can be combined in various ways such as in parallel or in sequence.
                Furthermore, tasks are observable which means it is possible to observe a --- partial --- result during execution and act upon it by for example starting new tasks.
                Examples of tasks are filling in a form, sending an email, reading a sensor or even doing a physical task.
-       \item[UI]
-               The \gls{UI} of the system is automatically generated from the representation of the type.
-               For example, in \gls{FP} languages this may be done using generic programming or template metaprogramming whereas in imperative programming languages they may be done using introspection\todo{Do I want this sentence here?}.
-               In many practical \gls{TOP} systems the \gls{UI} can be tweaked afterwards to suit the needs of the application.
-       \item[SDS]
+       \item[Resource access: \glspl{SDS}]
                Tasks can communicate using task values but this imposes a problem in many collaboration patterns where tasks that are not necessarily related need to share data.
                Tasks can also share data using \glspl{SDS}.
                \Glspl{SDS} are an abstraction over any data.
                An \gls{SDS} can represent typed data stored in a file, a chunk of memory, a database \etc.
                \Glspl{SDS} can also represent external impure data such as the time, random numbers or sensory data.
                Similar to tasks, transformation and combination of \glspl{SDS} is possible.
-       \item[PL]
-               \gls{TOP} languages are usually embedded in \gls{FP} languages but not necessarily.
-               The languages in which the \gls{TOP} is hosted provides the integration with the execution platform if there is any.
+       \item[\Gls{UOD}: PL]
+               The \gls{UOD} from the business layer is explicitly and separately modelled by the relations that exist in the functions of the host language.
+               \gls{TOP} languages are usually embedded in \gls{FP} languages but this not necessarily the case.
                Some host languages also provide the implementations for the tasks and \glspl{SDS}.
+               \todo{dit moet beter}
 \end{description}
 
-\begin{figure}[ht]
-       \centering
-       \begin{tikzpicture}
-               \pie[%
-                       color={red,violet,teal,blue},
-                       explode={0.1},
-                       hide number,
-                       text=inside,
-                       rotate=45,
-                       radius=2.25,
-               ]{%
-                       25/\textcolor{white}{UI},
-                       25/\textcolor{white}{Tasks},
-                       25/\textcolor{white}{PL},
-                       25/\textcolor{white}{SDS}
-               }
-               \node [draw,fill=yellow,circle]{Types};
-       \end{tikzpicture}
-       \caption{\Gls{TOSD} approach (adapted from Stutterheim et al.~\cite[pg.\ 20]{wang_maintaining_2018})}%
-       \label{fig:tosd}
-\end{figure}
-
-\section{Thesis Outline}
+\section{Thesis outline}
 
 \todo[inline]{reference correct chapters}
 Chapters 0 and 0 are based on the paper \emph{A Task-Based \acrshort{DSL} for Microcomputers}~\cite{koopman_task-based_2018}.
@@ -183,3 +169,6 @@ Chapters 0 and 0 are based on the paper \emph{Tiered versus Tierless \acrshort{I
 Chapters 0 and 0 are based on the paper \emph{Interpreting \glst{TOP} Programs on Tiny Computers}~\cite{lubbers_interpreting_2019}.
 
 Chapters 0 and 0 are based on the paper \emph{Writing \glst{IOT} applications with \glst{TOP}}~\cite{lubbers_writing_2019}.
+
+\input{subfilepostamble}
+\end{document}
diff --git a/introduction/iot-layers.tex b/introduction/iot-layers.tex
new file mode 100644 (file)
index 0000000..b2f5852
--- /dev/null
@@ -0,0 +1,17 @@
+\documentclass[tikz]{standalone}
+\usetikzlibrary{positioning}
+\begin{document}
+\begin{tikzpicture}[node distance=1em,nodes={rectangle,draw,minimum width=10em}]
+%      \node (0) [dotted] {Business layer};
+%      \node (1) [below=of 0] {Presentation layer};
+       \node (1) [] {Presentation layer};
+       \node (2) [below=of 1] {Application layer};
+       \node (3) [below=of 2] {Network layer};
+       \node (4) [below=of 3] {Perception layer};
+
+%      \draw [<->] (0) -- (1);
+       \draw [<->] (1) -- (2);
+       \draw [<->] (2) -- (3);
+       \draw [<->] (3) -- (4);
+\end{tikzpicture}
+\end{document}
diff --git a/introduction/tosd.tex b/introduction/tosd.tex
new file mode 100644 (file)
index 0000000..0f45e93
--- /dev/null
@@ -0,0 +1,20 @@
+\documentclass[tikz]{standalone}
+\usetikzlibrary{pie}
+\begin{document}
+\begin{tikzpicture}
+       \pie[%
+               color={red,violet,teal,blue},
+               explode={0.1},
+               hide number,
+               text=inside,
+               rotate=45,
+               radius=1.8,
+       ]{%
+               25/\textcolor{white}{UI},
+               25/\textcolor{white}{Tasks},
+               25/\textcolor{white}{UoD},
+               25/\textcolor{white}{SDS}
+       }
+       \node [draw,fill=yellow,circle]{Types};
+\end{tikzpicture}
+\end{document}
diff --git a/introduction/traditional.tex b/introduction/traditional.tex
new file mode 100644 (file)
index 0000000..81b0c46
--- /dev/null
@@ -0,0 +1,12 @@
+\documentclass[tikz]{standalone}
+\usetikzlibrary{positioning}
+\begin{document}
+\begin{tikzpicture}[node distance=1em,nodes={rectangle,draw,text=white,minimum width=10em,minimum height=2.5em}]
+       \node (0) [fill=red]               {Presentation layer};
+       \node (1) [fill=violet,below=of 0] {Business layer};
+       \node (2) [fill=blue,below=of 1]   {Resource access layer};
+
+       \draw [<->] (0) -- (1);
+       \draw [<->] (1) -- (2);
+\end{tikzpicture}
+\end{document}
index f7dd362..c6aba37 100644 (file)
--- a/latexmkrc
+++ b/latexmkrc
@@ -30,6 +30,9 @@ push @generated_exts, 'loa';
 # Clean morewords file
 push @generated_exts, 'mw';
 
+# Clean morewords file
+push @generated_exts, 'sta';
+
 # Clean bbl file as well
 $bibtex_use = 2;
 
diff --git a/lst/Clean System Files/expr_gadt.abc b/lst/Clean System Files/expr_gadt.abc
deleted file mode 100644 (file)
index 81dc7a1..0000000
+++ /dev/null
@@ -1,254 +0,0 @@
-.comp 920 010111010010000
-.start __expr_gadt_Start
-.depend "_SystemEnumStrict" "20220216025412"
-.depend "_SystemStrictLists" "20220216025412"
-.depend "StdStrictLists" "20220216025412"
-.depend "_SystemEnum" "20220216025412"
-.depend "StdEnum" "20220216025412"
-.depend "StdMisc" "20220216025412"
-.depend "StdFunctions" "20220216025412"
-.depend "StdCharList" "20220216025412"
-.depend "StdTuple" "20220216025412"
-.depend "StdOrdList" "20220216025412"
-.depend "StdList" "20220216025412"
-.depend "StdClass" "20220216025412"
-.depend "StdFile" "20220216025412"
-.depend "StdString" "20220216025412"
-.depend "_SystemArray" "20220216025412"
-.depend "StdArray" "20220216025412"
-.depend "StdChar" "20220216025412"
-.depend "StdReal" "20220216025412"
-.depend "StdInt" "20220216025412"
-.depend "StdOverloaded" "20220216025412"
-.depend "StdBool" "20220216025412"
-.depend "StdEnv" "20220216025412"
-.module m_expr_gadt "expr_gadt" "20220301194916"
-.endinfo
-.impmod _system
-.implab _cycle_in_spine
-.implab _type_error
-.implab _hnf
-.impdesc e_system_dind
-.implab e_system_nind e_system_eaind
-.impdesc e_system_dif
-.implab e_system_nif e_system_eaif
-.implab e_system_sif
-.impdesc e_system_dAP
-.implab e_system_nAP e_system_eaAP
-.implab e_system_sAP
-.impdesc ARRAY
-.impdesc _Nil
-.impdesc _Cons
-.impdesc _Conss
-.implab n_Conss ea_Conss
-.impdesc _Consts
-.implab n_Consts ea_Consts
-.impdesc _Conssts
-.implab n_Conssts ea_Conssts
-.impdesc _Tuple
-.impdesc d_S.1
-.implab n_S.1 ea_S.1
-.impdesc d_S.2
-.implab n_S.2 ea_S.2
-.impdesc d_S.3
-.implab n_S.3 ea_S.3
-.impdesc d_S.4
-.implab n_S.4 ea_S.4
-.impdesc d_S.5
-.implab n_S.5 ea_S.5
-.impdesc d_S.6
-.implab n_S.6 ea_S.6
-.implab _driver
-.impmod StdFunctions
-.impdesc e_StdFunctions_did
-.impmod StdString
-.impdesc e_StdString_dtoString;5
-.impmod StdOverloaded
-.impdesc e_StdOverloaded_d+;.+
-.implab e_StdOverloaded_n+;.+ e_StdOverloaded_ea+;.+
-.impdesc e_StdOverloaded_d==;.==
-.implab e_StdOverloaded_n==;.== e_StdOverloaded_ea==;.==
-.impdesc e_StdOverloaded_rtoString;
-.record r7 aaaa 4 0 "BM"
-.record k13 d{a}aa 3 0 e_StdOverloaded_rtoString; "Lit"
-.impdesc e_StdOverloaded_r+;
-.record k14 d{a}aaa 4 0 e_StdOverloaded_r+; "Add"
-.impdesc e_StdOverloaded_r==;
-.record k15 d{a}aaa 4 0 e_StdOverloaded_r==; "Eq"
-.export __expr_gadt_Start
-.o 0 0
-__expr_gadt_Start
-       build _ 0 n4
-.d 1 0
-       jmp _driver
-.n 0 _
-.o 1 0
-n4
-       push_node _cycle_in_spine 0
-.d 0 0
-       jsr ea4
-.o 0 1 i
-       fillI_b 0 0
-       pop_b 1
-.d 1 0
-       rtn
-.o 0 0
-ea4
-.o 0 0
-s4
-       buildh e_StdString_dtoString;5 0
-       create
-       buildI 42
-       push_a 2
-       update_a 2 3
-       update_a 1 2
-       update_a 0 1
-       pop_a 1
-.d 3 0
-       jsr s2
-.o 1 0
-.d 1 0
-       jsr s3
-.o 1 0
-       pushI_a 0
-       pop_a 1
-.d 0 1 i
-       rtn
-.o 3 0
-s2
-       build _ 0 n1
-       push_a 2
-       push_a 2
-       push_a 2
-       update_a 2 3
-       update_a 0 2
-       pop_a 1
-       fill_r k13 3 0 5 0 0
-       pop_a 5
-.d 1 0
-       rtn
-.n 0 _
-.o 1 0
-n1
-       push_node _cycle_in_spine 0
-.o 0 0
-ea1
-       buildh e_StdFunctions_did 0
-       buildh e_StdFunctions_did 0
-       buildh e_StdFunctions_did 0
-       buildh e_StdFunctions_did 0
-       fill_r r7 4 0 4 0 0
-       pop_a 4
-.d 1 0
-       rtn
-.n 1 _ _
-.o 1 0
-n3
-       push_node _cycle_in_spine 1
-.d 1 0
-       jsr ea3
-.o 1 0
-       fill_a 0 1
-       pop_a 1
-.d 1 0
-       rtn
-.o 1 0
-ea3
-       jsr_eval 0
-.o 1 0
-s3
-       pushD_a 0
-       jmpD ea k14 0 case.2 case.3
-case.1
-       pop_b 1
-       repl_args 3 3
-       pop_a 1
-       jsr_eval 0
-       push_r_args_a 0 4 0 2 1
-       jsr_eval 0
-       push_a 2
-       push_a 1
-       update_a 1 2
-       update_a 0 1
-       pop_a 1
-       update_a 1 3
-       updatepop_a 0 2
-       jmp_ap 1
-case.2
-       pop_b 1
-       repl_args 4 4
-       push_a 3
-       build _ 1 n3
-       push_a 3
-       build _ 1 n3
-       push_a 2
-       build _ 3 n16
-       jsr_eval 2
-       push_r_args_a 2 4 0 2 1
-       jsr_eval 0
-       update_a 1 5
-       updatepop_a 0 4
-       jmp_ap 1
-case.3
-       pop_b 1
-       repl_args 4 4
-       push_a 3
-       build _ 1 n3
-       push_a 3
-       build _ 1 n3
-       push_a 2
-       build _ 3 n17
-       jsr_eval 2
-       push_r_args_a 2 4 0 2 1
-       jsr_eval 0
-       update_a 1 5
-       updatepop_a 0 4
-       jmp_ap 1
-.n 3 _ ea17
-.o 1 0
-n17
-       push_node _cycle_in_spine 3
-.o 4 0
-ea17
-.o 4 0
-s17
-       push_a 2
-       jsr_eval 0
-       push_a 2
-       jsr_eval 0
-       push_a 2
-       jsr_eval 0
-       update_a 2 5
-       update_a 1 4
-       updatepop_a 0 3
-.d 3 0
-       jsr_i 2
-.o 0 1 b
-       fillB_b 0 0
-       pop_b 1
-.d 1 0
-       rtn
-.n 3 _ ea16
-.o 1 0
-n16
-       push_node _cycle_in_spine 3
-.o 4 0
-ea16
-.o 4 0
-s16
-       push_a 2
-       jsr_eval 0
-       push_a 2
-       jsr_eval 0
-       push_a 2
-       jsr_eval 0
-       update_a 2 5
-       update_a 1 4
-       updatepop_a 0 3
-.d 3 0
-       jsr_i 2
-.o 1 0
-       fill_a 0 1
-       pop_a 1
-.d 1 0
-       rtn
diff --git a/lst/Clean System Files/expr_gadt.o b/lst/Clean System Files/expr_gadt.o
deleted file mode 100644 (file)
index 09dfb1f..0000000
Binary files a/lst/Clean System Files/expr_gadt.o and /dev/null differ
diff --git a/lst/Clean System Files/generic_eq.abc b/lst/Clean System Files/generic_eq.abc
deleted file mode 100644 (file)
index ddb199e..0000000
+++ /dev/null
@@ -1,891 +0,0 @@
-.comp 920 010111010010000
-.start __generic_eq_Start
-.depend "StdGeneric" "20220216025412"
-.depend "_SystemEnumStrict" "20220216025412"
-.depend "_SystemStrictLists" "20220216025412"
-.depend "StdStrictLists" "20220216025412"
-.depend "_SystemEnum" "20220216025412"
-.depend "StdEnum" "20220216025412"
-.depend "StdMisc" "20220216025412"
-.depend "StdFunctions" "20220216025412"
-.depend "StdCharList" "20220216025412"
-.depend "StdTuple" "20220216025412"
-.depend "StdOrdList" "20220216025412"
-.depend "StdList" "20220216025412"
-.depend "StdClass" "20220216025412"
-.depend "StdFile" "20220216025412"
-.depend "StdString" "20220216025412"
-.depend "_SystemArray" "20220216025412"
-.depend "StdArray" "20220216025412"
-.depend "StdChar" "20220216025412"
-.depend "StdReal" "20220216025412"
-.depend "StdInt" "20220216025412"
-.depend "StdOverloaded" "20220216025412"
-.depend "StdBool" "20220216025412"
-.depend "StdEnv" "20220216025412"
-.module m_generic_eq "generic_eq" "20220301120355"
-.endinfo
-.impmod _system
-.implab _cycle_in_spine
-.implab _type_error
-.implab _hnf
-.impdesc e_system_dind
-.implab e_system_nind e_system_eaind
-.impdesc e_system_dif
-.implab e_system_nif e_system_eaif
-.implab e_system_sif
-.impdesc e_system_dAP
-.implab e_system_nAP e_system_eaAP
-.implab e_system_sAP
-.impdesc ARRAY
-.impdesc _Nil
-.impdesc _Cons
-.impdesc _Conss
-.implab n_Conss ea_Conss
-.impdesc _Consts
-.implab n_Consts ea_Consts
-.impdesc _Conssts
-.implab n_Conssts ea_Conssts
-.impdesc _Tuple
-.impdesc d_S.1
-.implab n_S.1 ea_S.1
-.impdesc d_S.2
-.implab n_S.2 ea_S.2
-.impdesc d_S.3
-.implab n_S.3 ea_S.3
-.impdesc d_S.4
-.implab n_S.4 ea_S.4
-.impdesc d_S.5
-.implab n_S.5 ea_S.5
-.impdesc d_S.6
-.implab n_S.6 ea_S.6
-.implab _driver
-.impmod StdChar
-.implab e_StdChar_s==;18
-.impmod StdInt
-.implab e_StdInt_s==;16
-.impdesc e_StdInt_d<;17
-.impmod StdBool
-.implab e_StdBool_s==;3
-.impmod StdGeneric
-.impdesc e_StdGeneric_dUNIT
-.impdesc e_StdGeneric_dLEFT
-.impdesc e_StdGeneric_dRIGHT
-.impdesc e_StdGeneric_dPAIR
-.impdesc e_StdGeneric_dCONS
-.desc d21 _hnf _add_arg 2 0 "C1"
-.desc d22 _hnf _hnf 0 0 "C2"
-.export __generic_eq_Start
-.o 0 0
-__generic_eq_Start
-       build _ 0 n1
-.d 1 0
-       jmp _driver
-.n 0 _
-.o 1 0
-n1
-       push_node _cycle_in_spine 0
-.o 0 0
-ea1
-       buildh _Nil 0
-       buildI 4
-       buildh _Cons 2
-       buildI 3
-       buildh _Cons 2
-       buildI 2
-       buildh _Cons 2
-       buildh _Nil 0
-       buildI 3
-       buildh _Cons 2
-       buildI 2
-       buildh _Cons 2
-       buildI 1
-       buildh _Cons 2
-       buildh e_StdInt_d<;17 0
-       build d10 3 n10
-       buildB TRUE
-       buildh _Just 1
-       buildh _Nil 0
-       buildh _Tuple 2
-       buildI 42
-       buildh d21 2
-       buildh d22 0
-       build _ 2 n11
-       push_a 1
-       push_a 1
-       fillh _Tuple 2 4
-       pop_a 2
-.d 1 0
-       rtn
-.n 2 _
-.o 1 0
-n11
-       push_node _cycle_in_spine 2
-.d 2 0
-       jsr ea11
-.o 0 1 b
-       fillB_b 0 0
-       pop_b 1
-.d 1 0
-       rtn
-.o 2 0
-ea11
-.o 2 0
-s11
-       push_a 1
-       build _ 1 n15
-       push_a 1
-       build _ 1 n15
-       buildh d47 0
-       update_a 2 4
-       update_a 1 3
-       updatepop_a 0 2
-.d 3 0
-       jmp s6
-.desc d47 _hnf l47 2 0 "_f6"
-.a 2 ea47
-.o 2 0
-l47
-       push_args 0 1 1
-       update_a 2 1
-       create
-       update_a 0 3
-       pop_a 1
-.o 3 0
-ea47
-.o 3 0
-s47
-       push_a 0
-       jsr_eval 0
-       buildh d41 0
-       buildh d46 0
-       push_a 4
-       push_a 3
-       update_a 1 4
-       update_a 2 1
-       update_a 3 2
-       update_a 0 3
-       pop_a 1
-       update_a 3 5
-       update_a 2 4
-       update_a 1 3
-       updatepop_a 0 2
-.d 4 0
-       jsr s9
-.o 0 1 b
-       fillB_b 0 0
-       pop_b 1
-.d 1 0
-       rtn
-.desc d46 _hnf l46 2 0 "_f5"
-.a 2 ea46
-.o 2 0
-l46
-       push_args 0 1 1
-       update_a 2 1
-       create
-       update_a 0 3
-       pop_a 1
-.o 3 0
-ea46
-.o 3 0
-s46
-       push_a 1
-       jsr_eval 0
-       push_a 1
-       jsr_eval 0
-       buildh d45 0
-       update_a 2 4
-       update_a 1 3
-       updatepop_a 0 2
-.d 3 0
-       jsr s7
-.o 0 1 b
-       fillB_b 0 0
-       pop_b 1
-.d 1 0
-       rtn
-.desc d45 _hnf l45 2 0 "_f4"
-.a 2 ea45
-.o 2 0
-l45
-       push_args 0 1 1
-       update_a 2 1
-       create
-       update_a 0 3
-       pop_a 1
-.o 3 0
-ea45
-.o 3 0
-s45
-       push_a 1
-       jsr_eval 0
-       push_a 1
-       jsr_eval 0
-       buildh d44 0
-       buildh d2 0
-       update_a 3 5
-       update_a 2 4
-       update_a 1 3
-       updatepop_a 0 2
-.d 4 0
-       jsr s8
-.o 0 1 b
-       fillB_b 0 0
-       pop_b 1
-.d 1 0
-       rtn
-.desc d44 _hnf l44 2 0 "_f3"
-.a 2 ea44
-.o 2 0
-l44
-       push_args 0 1 1
-       update_a 2 1
-       create
-       update_a 0 3
-       pop_a 1
-.o 3 0
-ea44
-.o 3 0
-s44
-       push_a 1
-       jsr_eval 0
-       repl_args 2 2
-       push_a 2
-       jsr_eval 0
-       repl_args 2 2
-       buildh d43 0
-       buildh d42 0
-       update_a 5 7
-       update_a 4 6
-       update_a 3 5
-       update_a 2 4
-       update_a 1 3
-       updatepop_a 0 2
-.d 6 0
-       jsr s12
-.o 0 1 b
-       fillB_b 0 0
-       pop_b 1
-.d 1 0
-       rtn
-.desc d43 _hnf l43 2 0 "_f2"
-.a 2 ea43
-.o 2 0
-l43
-       push_args 0 1 1
-       update_a 2 1
-       create
-       update_a 0 3
-       pop_a 1
-.o 3 0
-ea43
-.o 3 0
-s43
-       push_a 0
-       jsr_eval 0
-       buildh d3 0
-       push_a 3
-       push_a 2
-       update_a 1 3
-       update_a 2 1
-       update_a 0 2
-       pop_a 1
-       update_a 2 4
-       update_a 1 3
-       updatepop_a 0 2
-.d 3 0
-       jsr s13
-.o 0 1 b
-       fillB_b 0 0
-       pop_b 1
-.d 1 0
-       rtn
-.desc d42 _hnf l42 2 0 "_f1"
-.a 2 ea42
-.o 2 0
-l42
-       push_args 0 1 1
-       update_a 2 1
-       create
-       update_a 0 3
-       pop_a 1
-.o 3 0
-ea42
-.o 3 0
-s42
-       push_a 0
-       jsr_eval 0
-       buildh d4 0
-       push_a 3
-       push_a 2
-       update_a 1 3
-       update_a 2 1
-       update_a 0 2
-       pop_a 1
-       update_a 2 4
-       update_a 1 3
-       updatepop_a 0 2
-.d 3 0
-       jsr s10
-.o 0 1 b
-       fillB_b 0 0
-       pop_b 1
-.d 1 0
-       rtn
-.desc d2 _hnf l2 2 0 "gEq_Int;1"
-.o 3 0
-i2
-       pop_a 1
-       jsr_eval 1
-       pushI_a 1
-       jsr_eval 0
-       pushI_a 0
-       pop_a 2
-.d 0 2 ii
-       jmp s2
-.ai 0 a2 i2
-.o 2 0
-l2
-       repl_args 1 1
-.o 2 0
-a2
-.d 2 0
-       jsr ea2
-.o 0 1 b
-       buildB_b 0
-       pop_b 1
-.d 1 0
-       rtn
-.o 2 0
-ea2
-       jsr_eval 1
-       jsr_eval 0
-       pushI_a 1
-       pushI_a 0
-       pop_a 2
-.o 0 2 ii
-s2
-       push_b 1
-       push_b 1
-       update_b 1 3
-       updatepop_b 0 2
-       eqI
-.d 0 1 b
-       rtn
-.desc d4 _hnf l4 2 0 "gEq_Char;4"
-.o 3 0
-i4
-       pop_a 1
-       jsr_eval 1
-       pushC_a 1
-       jsr_eval 0
-       pushC_a 0
-       pop_a 2
-.d 0 2 cc
-       jmp s4
-.ai 0 a4 i4
-.o 2 0
-l4
-       repl_args 1 1
-.o 2 0
-a4
-.d 2 0
-       jsr ea4
-.o 0 1 b
-       buildB_b 0
-       pop_b 1
-.d 1 0
-       rtn
-.o 2 0
-ea4
-       jsr_eval 1
-       jsr_eval 0
-       pushC_a 1
-       pushC_a 0
-       pop_a 2
-.o 0 2 cc
-s4
-       push_b 1
-       push_b 1
-       update_b 1 3
-       updatepop_b 0 2
-       eqC
-.d 0 1 b
-       rtn
-.desc d3 _hnf l3 2 0 "gEq_Bool;2"
-.o 3 0
-i3
-       pop_a 1
-       jsr_eval 1
-       pushB_a 1
-       jsr_eval 0
-       pushB_a 0
-       pop_a 2
-.d 0 2 bb
-       jmp s3
-.ai 0 a3 i3
-.o 2 0
-l3
-       repl_args 1 1
-.o 2 0
-a3
-.d 2 0
-       jsr ea3
-.o 0 1 b
-       buildB_b 0
-       pop_b 1
-.d 1 0
-       rtn
-.o 2 0
-ea3
-       jsr_eval 1
-       jsr_eval 0
-       pushB_a 1
-       pushB_a 0
-       pop_a 2
-.o 0 2 bb
-s3
-       push_b 1
-       push_b 1
-       update_b 1 3
-       updatepop_b 0 2
-       eqB
-.d 0 1 b
-       rtn
-.o 3 0
-s13
-       push_a 2
-       build _ 1 n17
-       push_a 2
-       build _ 1 n17
-       buildh d41 0
-       push_a 3
-       buildh d7 1
-       buildh d9 2
-       update_a 2 5
-       update_a 1 4
-       updatepop_a 0 3
-.d 3 0
-       jmp s6
-.n 1 _ ea17
-.o 1 0
-n17
-       push_node _cycle_in_spine 1
-.o 2 0
-ea17
-       jsr_eval 0
-.o 2 0
-s17
-       eq_desc _Just 1 0
-       jmp_true case.1
-       jmp case.2
-case.1
-       repl_args 1 1
-       push_a 0
-       buildh e_StdGeneric_dCONS 1
-       fillh e_StdGeneric_dLEFT 1 2
-       pop_a 1
-.d 1 0
-       rtn
-case.2
-       buildh e_StdGeneric_dUNIT 0
-       buildh e_StdGeneric_dCONS 1
-       fillh e_StdGeneric_dRIGHT 1 2
-       pop_a 1
-.d 1 0
-       rtn
-.o 6 0
-s12
-       push_a 5
-       push_a 5
-       buildh _Tuple 2
-       build _ 1 n16
-       push_a 4
-       push_a 4
-       buildh _Tuple 2
-       build _ 1 n16
-       push_a 3
-       push_a 3
-       buildh d8 2
-       buildh d7 1
-       update_a 2 8
-       update_a 1 7
-       updatepop_a 0 6
-.d 3 0
-       jmp s6
-.n 1 _ ea16
-.o 1 0
-n16
-       push_node _cycle_in_spine 1
-.o 2 0
-ea16
-       jsr_eval 0
-       repl_args 2 2
-.o 3 0
-s16
-       push_a 1
-       push_a 1
-       buildh e_StdGeneric_dPAIR 2
-       fillh e_StdGeneric_dCONS 1 3
-       pop_a 2
-.d 1 0
-       rtn
-.n 1 _ ea15
-.o 1 0
-n15
-       push_node _cycle_in_spine 1
-.o 2 0
-ea15
-       jsr_eval 0
-.o 2 0
-s15
-       eq_desc d21 2 0
-       jmp_true case.3
-       jmp case.4
-case.3
-       repl_args 2 2
-       push_a 1
-       push_a 1
-       buildh e_StdGeneric_dPAIR 2
-       buildh e_StdGeneric_dCONS 1
-       fillh e_StdGeneric_dLEFT 1 3
-       pop_a 2
-.d 1 0
-       rtn
-case.4
-       buildh e_StdGeneric_dUNIT 0
-       buildh e_StdGeneric_dCONS 1
-       fillh e_StdGeneric_dRIGHT 1 2
-       pop_a 1
-.d 1 0
-       rtn
-.desc d10 n10 l10 3 0 "gEq__List;12"
-.o 4 0
-i10
-       pop_a 1
-       jsr_eval 1
-.d 3 0
-       jmp s10
-.ai 0 a10 i10
-.o 2 0
-l10
-       repl_args 2 2
-.o 3 0
-a10
-.d 3 0
-       jsr ea10
-.o 0 1 b
-       buildB_b 0
-       pop_b 1
-.d 1 0
-       rtn
-.n 3 d10
-.o 1 0
-n10
-       push_node _cycle_in_spine 3
-.d 3 0
-       jsr ea10
-.o 0 1 b
-       fillB_b 0 0
-       pop_b 1
-.d 1 0
-       rtn
-.o 3 0
-ea10
-       jsr_eval 1
-.o 3 0
-s10
-       push_a 2
-       build _ 1 n14
-       push_a 2
-       build _ 1 n14
-       buildh d41 0
-       push_a 3
-       buildh d10 1
-       push_a 4
-       buildh d8 2
-       buildh d7 1
-       buildh d9 2
-       update_a 2 5
-       update_a 1 4
-       updatepop_a 0 3
-.d 3 0
-       jmp s6
-.desc d41 _hnf l41 2 0 "_f0"
-.a 2 ea41
-.o 2 0
-l41
-       push_args 0 1 1
-       update_a 2 1
-       create
-       update_a 0 3
-       pop_a 1
-.o 3 0
-ea41
-.o 3 0
-s41
-       push_a 1
-       jsr_eval 0
-       push_a 1
-       jsr_eval 0
-       buildh d5 0
-       update_a 2 4
-       update_a 1 3
-       updatepop_a 0 2
-.d 3 0
-       jsr s7
-.o 0 1 b
-       fillB_b 0 0
-       pop_b 1
-.d 1 0
-       rtn
-.desc d8 _hnf l8 4 0 "gEq_PAIR;10"
-.a 0 a8
-.o 2 0
-l8
-       repl_args 3 3
-.o 4 0
-a8
-.d 4 0
-       jsr ea8
-.o 0 1 b
-       buildB_b 0
-       pop_b 1
-.d 1 0
-       rtn
-.o 4 0
-ea8
-       jsr_eval 3
-       jsr_eval 2
-       jsr_eval 0
-.o 4 0
-s8
-       push_args 2 2 2
-       buildh _Nil 0
-       update_a 0 5
-       pop_a 1
-       push_args 5 2 2
-       buildh _Nil 0
-       update_a 0 8
-       pop_a 1
-       push_a 0
-       push_a 3
-       push_a 6
-       update_a 8 10
-       update_a 6 9
-       update_a 4 8
-       update_a 2 7
-       update_a 1 6
-       updatepop_a 0 5
-       jsr_ap 2
-       pushB_a 0
-       pop_a 1
-       jmp_false else.5
-       push_a 0
-       push_a 3
-       jsr_eval 0
-       push_a 3
-       push_a 1
-       update_a 1 2
-       update_a 0 1
-       pop_a 1
-       update_a 2 5
-       update_a 1 4
-       updatepop_a 0 3
-       jsr_ap 2
-       pushB_a 0
-       pop_a 1
-.d 0 1 b
-       rtn
-else.5
-       pop_a 3
-       pushB FALSE
-.d 0 1 b
-       rtn
-.desc d5 _hnf l5 2 0 "gEq_UNIT;5"
-.a 0 a5
-.o 2 0
-l5
-       repl_args 1 1
-.o 2 0
-a5
-.o 2 0
-ea5
-       pop_a 2
-       pushB TRUE
-       buildB_b 0
-       pop_b 1
-.d 1 0
-       rtn
-.desc d7 _hnf l7 3 0 "gEq_CONS;7"
-.a 0 a7
-.o 2 0
-l7
-       repl_args 2 2
-.o 3 0
-a7
-.d 3 0
-       jsr ea7
-.o 0 1 b
-       buildB_b 0
-       pop_b 1
-.d 1 0
-       rtn
-.o 3 0
-ea7
-       jsr_eval 2
-       jsr_eval 1
-       jsr_eval 0
-.o 3 0
-s7
-       push_args 1 1 1
-       buildh _Nil 0
-       update_a 0 3
-       pop_a 1
-       push_args 3 1 1
-       buildh _Nil 0
-       update_a 0 5
-       pop_a 1
-       push_a 0
-       push_a 2
-       push_a 4
-       update_a 2 7
-       update_a 1 6
-       updatepop_a 0 5
-       jsr_ap 2
-       pushB_a 0
-       pop_a 1
-.d 0 1 b
-       rtn
-.desc d9 _hnf l9 4 0 "gEq_EITHER;11"
-.a 0 a9
-.o 2 0
-l9
-       repl_args 3 3
-.o 4 0
-a9
-.d 4 0
-       jsr ea9
-.o 0 1 b
-       buildB_b 0
-       pop_b 1
-.d 1 0
-       rtn
-.o 4 0
-ea9
-       jsr_eval 2
-.o 4 0
-s9
-       eq_desc e_StdGeneric_dLEFT 1 2
-       jmp_true case.6
-       jmp case.7
-case.6
-       push_args 2 1 1
-       buildh _Nil 0
-       update_a 0 4
-       pop_a 1
-       jsr_eval 4
-       eq_desc e_StdGeneric_dLEFT 1 4
-       jmp_true case.9
-       pop_a 1
-       jmp case.8
-case.9
-       push_args 4 1 1
-       buildh _Nil 0
-       update_a 0 6
-       pop_a 1
-       push_a 0
-       push_a 3
-       jsr_eval 0
-       push_a 3
-       push_a 1
-       update_a 1 2
-       update_a 0 1
-       pop_a 1
-       update_a 2 8
-       update_a 1 7
-       updatepop_a 0 6
-       jsr_ap 2
-       pushB_a 0
-       pop_a 1
-.d 0 1 b
-       rtn
-case.7
-       push_args 2 1 1
-       buildh _Nil 0
-       update_a 0 4
-       pop_a 1
-       jsr_eval 4
-       eq_desc e_StdGeneric_dRIGHT 1 4
-       jmp_true case.10
-       pop_a 1
-       jmp case.8
-case.10
-       push_args 4 1 1
-       buildh _Nil 0
-       update_a 0 6
-       pop_a 1
-       push_a 0
-       push_a 4
-       jsr_eval 0
-       push_a 3
-       push_a 1
-       update_a 1 2
-       update_a 0 1
-       pop_a 1
-       update_a 2 8
-       update_a 1 7
-       updatepop_a 0 6
-       jsr_ap 2
-       pushB_a 0
-       pop_a 1
-.d 0 1 b
-       rtn
-case.8
-       pop_a 4
-       pushB FALSE
-.d 0 1 b
-       rtn
-.n 1 _ ea14
-.o 1 0
-n14
-       push_node _cycle_in_spine 1
-.o 2 0
-ea14
-       jsr_eval 0
-.o 2 0
-s14
-       eq_desc _Cons 2 0
-       jmp_true case.11
-       jmp case.12
-case.11
-       repl_args 2 2
-       push_a 1
-       push_a 1
-       buildh e_StdGeneric_dPAIR 2
-       buildh e_StdGeneric_dCONS 1
-       fillh e_StdGeneric_dLEFT 1 3
-       pop_a 2
-.d 1 0
-       rtn
-case.12
-       buildh e_StdGeneric_dUNIT 0
-       buildh e_StdGeneric_dCONS 1
-       fillh e_StdGeneric_dRIGHT 1 2
-       pop_a 1
-.d 1 0
-       rtn
-.o 3 0
-s6
-       push_a 2
-       push_a 2
-       push_a 2
-       update_a 2 5
-       update_a 1 4
-       updatepop_a 0 3
-       jsr_ap 2
-       pushB_a 0
-       pop_a 1
-.d 0 1 b
-       rtn
diff --git a/lst/Clean System Files/generic_eq.o b/lst/Clean System Files/generic_eq.o
deleted file mode 100644 (file)
index 2b5274c..0000000
Binary files a/lst/Clean System Files/generic_eq.o and /dev/null differ
diff --git a/lst/Clean System Files/generic_print.abc b/lst/Clean System Files/generic_print.abc
deleted file mode 100644 (file)
index 1e16259..0000000
+++ /dev/null
@@ -1,1165 +0,0 @@
-.comp 920 010111010010000
-.start __generic_print_Start
-.depend "StdGeneric" "20220216025412"
-.depend "_SystemEnumStrict" "20220216025412"
-.depend "_SystemStrictLists" "20220216025412"
-.depend "StdStrictLists" "20220216025412"
-.depend "_SystemEnum" "20220216025412"
-.depend "StdEnum" "20220216025412"
-.depend "StdMisc" "20220216025412"
-.depend "StdFunctions" "20220216025412"
-.depend "StdCharList" "20220216025412"
-.depend "StdTuple" "20220216025412"
-.depend "StdOrdList" "20220216025412"
-.depend "StdList" "20220216025412"
-.depend "StdClass" "20220216025412"
-.depend "StdFile" "20220216025412"
-.depend "StdString" "20220216025412"
-.depend "_SystemArray" "20220216025412"
-.depend "StdArray" "20220216025412"
-.depend "StdChar" "20220216025412"
-.depend "StdReal" "20220216025412"
-.depend "StdInt" "20220216025412"
-.depend "StdOverloaded" "20220216025412"
-.depend "StdBool" "20220216025412"
-.depend "StdEnv" "20220216025412"
-.module m_generic_print "generic_print" "20220301120244"
-.endinfo
-.impmod _system
-.implab _cycle_in_spine
-.implab _type_error
-.implab _hnf
-.impdesc e_system_dind
-.implab e_system_nind e_system_eaind
-.impdesc e_system_dif
-.implab e_system_nif e_system_eaif
-.implab e_system_sif
-.impdesc e_system_dAP
-.implab e_system_nAP e_system_eaAP
-.implab e_system_sAP
-.impdesc ARRAY
-.impdesc _Nil
-.impdesc _Cons
-.impdesc _Conss
-.implab n_Conss ea_Conss
-.impdesc _Consts
-.implab n_Consts ea_Consts
-.impdesc _Conssts
-.implab n_Conssts ea_Conssts
-.impdesc _Tuple
-.impdesc d_S.1
-.implab n_S.1 ea_S.1
-.impdesc d_S.2
-.implab n_S.2 ea_S.2
-.impdesc d_S.3
-.implab n_S.3 ea_S.3
-.impdesc d_S.4
-.implab n_S.4 ea_S.4
-.impdesc d_S.5
-.implab n_S.5 ea_S.5
-.impdesc d_S.6
-.implab n_S.6 ea_S.6
-.implab _driver
-.impmod StdString
-.impdesc e_StdString_dtoString;5
-.implab e_StdString_ntoString;5
-.impdesc e_StdString_dtoString;7
-.implab e_StdString_ntoString;7
-.impmod StdGeneric
-.impdesc e_StdGeneric_dUNIT
-.impdesc e_StdGeneric_dLEFT
-.impdesc e_StdGeneric_dRIGHT
-.impdesc e_StdGeneric_dPAIR
-.impdesc e_StdGeneric_dCONS
-.impdesc e_StdGeneric_dRECORD
-.impdesc e_StdGeneric_rGenericTypeDefDescriptor
-.impdesc e_StdGeneric_rGenericConsDescriptor
-.impdesc e_StdGeneric_dGenericConsDescriptor.gcd_name
-.implab e_StdGeneric_nGenericConsDescriptor.gcd_name
-.impdesc e_StdGeneric_dGenConsNoPrio
-.impdesc e_StdGeneric_rGenericRecordDescriptor
-.impdesc e_StdGeneric_rGenericFieldDescriptor
-.impdesc e_StdGeneric_dGenericFieldDescriptor.gfd_name
-.implab e_StdGeneric_nGenericFieldDescriptor.gfd_name
-.impdesc e_StdGeneric_dGenTypeCons
-.impdesc e_StdGeneric_kGenTypeVar
-.impdesc e_StdGeneric_dGenTypeApp
-.impdesc e_StdGeneric_dGenTypeArrow
-.record r42 aa 2 0 "T"
-.export __generic_print_Start
-.o 0 0
-__generic_print_Start
-       build _ 0 n1
-.d 1 0
-       jmp _driver
-.n 0 _ ea1
-.o 1 0
-n1
-       push_node _cycle_in_spine 0
-.o 1 0
-ea1
-.o 1 0
-s1
-       buildh _Nil 0
-       buildh _Nil 0
-       buildh _None 0
-       buildh _Cons 2
-       buildR 3.14
-       buildh _Tuple 2
-       buildI 42
-.d 4 0
-       jmp s14
-.o 4 0
-s14
-       create
-       push_a 2
-       push_a 2
-       update_a 2 4
-       update_a 1 3
-       updatepop_a 0 2
-.d 3 0
-       jsr s39
-.o 1 0
-       buildh d65 0
-       build _ 0 n38
-       buildh d8 2
-       buildh d2 0
-       build _ 0 n37
-       buildh d8 2
-       buildh d9 2
-       build _ 0 n36
-       push_a 3
-       push_a 3
-       update_a 1 4
-       update_a 2 1
-       update_a 3 2
-       update_a 0 3
-       pop_a 1
-       update_a 3 4
-       update_a 2 3
-       update_a 1 2
-       updatepop_a 0 1
-.d 5 0
-       jmp s7
-.desc d65 _hnf l65 2 0 "_f2"
-.a 2 ea65
-.o 2 0
-l65
-       push_args 0 1 1
-       update_a 2 1
-       create
-       update_a 0 3
-       pop_a 1
-.o 3 0
-ea65
-.o 3 0
-s65
-       push_a 0
-       jsr_eval 0
-       repl_args 2 2
-       buildh d64 0
-       buildh d3 0
-       push_a 5
-       push_a 4
-       update_a 1 5
-       update_a 2 1
-       update_a 3 2
-       update_a 4 3
-       update_a 0 4
-       pop_a 1
-       update_a 4 6
-       update_a 3 5
-       update_a 2 4
-       update_a 1 3
-       updatepop_a 0 2
-.d 6 0
-       jmp s11
-.desc d64 _hnf l64 2 0 "_f1"
-.a 2 ea64
-.o 2 0
-l64
-       push_args 0 1 1
-       update_a 2 1
-       create
-       update_a 0 3
-       pop_a 1
-.o 3 0
-ea64
-.o 3 0
-s64
-       push_a 0
-       jsr_eval 0
-       buildh d63 0
-       push_a 3
-       push_a 2
-       update_a 1 3
-       update_a 2 1
-       update_a 0 2
-       pop_a 1
-       update_a 2 4
-       update_a 1 3
-       updatepop_a 0 2
-.d 4 0
-       jmp s12
-.desc d63 _hnf l63 2 0 "_f0"
-.a 2 ea63
-.o 2 0
-l63
-       push_args 0 1 1
-       update_a 2 1
-       create
-       update_a 0 3
-       pop_a 1
-.o 3 0
-ea63
-.o 3 0
-s63
-       push_a 0
-       jsr_eval 0
-       buildh d2 0
-       push_a 3
-       push_a 2
-       update_a 1 3
-       update_a 2 1
-       update_a 0 2
-       pop_a 1
-       update_a 2 4
-       update_a 1 3
-       updatepop_a 0 2
-.d 4 0
-       jmp s13
-.n 0 _
-.o 1 0
-n37
-       push_node _cycle_in_spine 0
-.o 0 0
-ea37
-       build _ 0 n36
-       buildI 0
-       buildAC "f1"
-       buildh ARRAY 1
-       fill_r e_StdGeneric_rGenericFieldDescriptor 3 0 3 0 0
-       pop_a 3
-.d 1 0
-       rtn
-.n 0 _
-.o 1 0
-n38
-       push_node _cycle_in_spine 0
-.o 0 0
-ea38
-       build _ 0 n36
-       buildI 1
-       buildAC "f2"
-       buildh ARRAY 1
-       fill_r e_StdGeneric_rGenericFieldDescriptor 3 0 3 0 0
-       pop_a 3
-.d 1 0
-       rtn
-.n 0 _
-.o 1 0
-n36
-       push_node _cycle_in_spine 0
-.o 0 0
-ea36
-       build _ 0 n35
-       build _ 0 n34
-       buildI 0
-       buildI 2
-       buildAC "T"
-       buildh ARRAY 1
-       fill_r e_StdGeneric_rGenericRecordDescriptor 5 0 5 0 0
-       pop_a 5
-.d 1 0
-       rtn
-.n 0 _ ea34
-.o 1 0
-n34
-       push_node _cycle_in_spine 0
-.o 1 0
-ea34
-.o 1 0
-s34
-       buildAC "T"
-       buildh ARRAY 1
-       buildh e_StdGeneric_dGenTypeCons 1
-       buildAC "Int"
-       buildh ARRAY 1
-       buildh e_StdGeneric_dGenTypeCons 1
-       buildAC "_!Maybe"
-       buildh ARRAY 1
-       buildh e_StdGeneric_dGenTypeCons 1
-       buildh e_StdGeneric_dGenTypeApp 2
-       buildAC "_List"
-       buildh ARRAY 1
-       buildh e_StdGeneric_dGenTypeCons 1
-       buildh e_StdGeneric_dGenTypeApp 2
-       buildAC "Real"
-       buildh ARRAY 1
-       buildh e_StdGeneric_dGenTypeCons 1
-       buildAC "_Tuple2"
-       buildh ARRAY 1
-       buildh e_StdGeneric_dGenTypeCons 1
-       buildh e_StdGeneric_dGenTypeApp 2
-       buildh e_StdGeneric_dGenTypeApp 2
-       buildh e_StdGeneric_dGenTypeArrow 2
-       buildAC "Int"
-       buildh ARRAY 1
-       buildh e_StdGeneric_dGenTypeCons 1
-       fillh e_StdGeneric_dGenTypeArrow 2 2
-.d 1 0
-       rtn
-.n 0 _ ea35
-.o 1 0
-n35
-       push_node _cycle_in_spine 0
-.o 1 0
-ea35
-.o 1 0
-s35
-       buildh _Nil 0
-       buildAC "f2"
-       buildh ARRAY 1
-       buildh _Cons 2
-       buildAC "f1"
-       buildh ARRAY 1
-       fillh _Cons 2 2
-.d 1 0
-       rtn
-.desc d3 _hnf l3 2 0 "gPrint_Real;3"
-.o 4 0
-i3
-       pop_a 1
-.d 3 0
-       jmp s3
-.ai 2 ea3 i3
-.o 2 0
-l3
-       push_args 0 1 1
-       update_a 2 1
-       create
-       update_a 0 3
-       pop_a 1
-.o 3 0
-ea3
-.o 3 0
-s3
-       push_a 0
-       build _ 1 e_StdString_ntoString;7
-       push_a 2
-       push_a 1
-       update_a 1 2
-       update_a 0 1
-       pop_a 1
-       fillh _Cons 2 4
-       pop_a 2
-.d 1 0
-       rtn
-.desc d2 _hnf l2 2 0 "gPrint_Int;1"
-.o 4 0
-i2
-       pop_a 1
-.d 3 0
-       jmp s2
-.ai 2 ea2 i2
-.o 2 0
-l2
-       push_args 0 1 1
-       update_a 2 1
-       create
-       update_a 0 3
-       pop_a 1
-.o 3 0
-ea2
-.o 3 0
-s2
-       push_a 0
-       build _ 1 e_StdString_ntoString;5
-       push_a 2
-       push_a 1
-       update_a 1 2
-       update_a 0 1
-       pop_a 1
-       fillh _Cons 2 4
-       pop_a 2
-.d 1 0
-       rtn
-.o 4 0
-s13
-       push_a 1
-       build _ 1 n33
-       buildh d4 0
-       build _ 0 n32
-       buildh d6 2
-       build _ 0 n31
-       push_a 3
-       push_a 1
-       update_a 1 2
-       update_a 0 1
-       pop_a 1
-       buildh d6 2
-       buildh d10 2
-       push_a 4
-       push_a 2
-       update_a 1 3
-       update_a 2 1
-       update_a 0 2
-       pop_a 1
-       update_a 2 5
-       update_a 1 4
-       updatepop_a 0 3
-.d 4 0
-       jmp s5
-.n 0 _
-.o 1 0
-n31
-       push_node _cycle_in_spine 0
-.o 0 0
-ea31
-       build _ 0 n29
-       build _ 0 n28
-       buildh e_StdGeneric_dGenConsNoPrio 0
-       buildI 0
-       buildI 1
-       buildAC "_!Just"
-       buildh ARRAY 1
-       push_a 5
-       update_a 3 6
-       update_a 4 3
-       update_a 5 4
-       update_a 0 5
-       pop_a 1
-       fill_r e_StdGeneric_rGenericConsDescriptor 6 0 6 0 0
-       pop_a 6
-.d 1 0
-       rtn
-.n 0 _ ea27
-.o 1 0
-n27
-       push_node _cycle_in_spine 0
-.o 1 0
-ea27
-.o 1 0
-s27
-       buildh _Nil 0
-       build _ 0 n32
-       buildh _Cons 2
-       build _ 0 n31
-       fillh _Cons 2 2
-.d 1 0
-       rtn
-.n 0 _
-.o 1 0
-n28
-       push_node _cycle_in_spine 0
-.o 0 0
-ea28
-       build _ 0 n27
-       buildI 2
-       buildI 1
-       buildAC "_!Maybe"
-       buildh ARRAY 1
-       fill_r e_StdGeneric_rGenericTypeDefDescriptor 4 0 4 0 0
-       pop_a 4
-.d 1 0
-       rtn
-.n 0 _
-.o 1 0
-n32
-       push_node _cycle_in_spine 0
-.o 0 0
-ea32
-       build _ 0 n30
-       build _ 0 n28
-       buildh e_StdGeneric_dGenConsNoPrio 0
-       buildI 1
-       buildI 0
-       buildAC "_!None"
-       buildh ARRAY 1
-       push_a 5
-       update_a 3 6
-       update_a 4 3
-       update_a 5 4
-       update_a 0 5
-       pop_a 1
-       fill_r e_StdGeneric_rGenericConsDescriptor 6 0 6 0 0
-       pop_a 6
-.d 1 0
-       rtn
-.n 0 _ ea29
-.o 1 0
-n29
-       push_node _cycle_in_spine 0
-.o 1 0
-ea29
-.o 1 0
-s29
-       pushI 0
-       buildhr e_StdGeneric_kGenTypeVar 0 1
-       buildAC "_!Maybe"
-       buildh ARRAY 1
-       buildh e_StdGeneric_dGenTypeCons 1
-       buildh e_StdGeneric_dGenTypeApp 2
-       pushI 0
-       buildhr e_StdGeneric_kGenTypeVar 0 1
-       fillh e_StdGeneric_dGenTypeArrow 2 2
-.d 1 0
-       rtn
-.n 0 _ ea30
-.o 1 0
-n30
-       push_node _cycle_in_spine 0
-.o 1 0
-ea30
-.o 1 0
-s30
-       pushI 0
-       buildhr e_StdGeneric_kGenTypeVar 0 1
-       buildAC "_!Maybe"
-       buildh ARRAY 1
-       buildh e_StdGeneric_dGenTypeCons 1
-       fillh e_StdGeneric_dGenTypeApp 2 2
-.d 1 0
-       rtn
-.n 1 _ ea33
-.o 1 0
-n33
-       push_node _cycle_in_spine 1
-.o 2 0
-ea33
-.o 2 0
-s33
-       eq_desc _Just 1 0
-       jmp_true case.1
-       jmp case.2
-case.1
-       repl_args 1 1
-       push_a 0
-       buildh e_StdGeneric_dCONS 1
-       fillh e_StdGeneric_dLEFT 1 2
-       pop_a 1
-.d 1 0
-       rtn
-case.2
-       buildh e_StdGeneric_dUNIT 0
-       buildh e_StdGeneric_dCONS 1
-       fillh e_StdGeneric_dRIGHT 1 2
-       pop_a 1
-.d 1 0
-       rtn
-.desc d12 _hnf l12 3 0 "gPrint__List;13"
-.o 5 0
-i12
-       pop_a 1
-       jsr_eval 1
-.d 4 0
-       jmp s12
-.ai 3 ea12 i12
-.o 2 0
-l12
-       push_args 0 2 2
-       update_a 3 2
-       create
-       update_a 0 4
-       pop_a 1
-.o 4 0
-ea12
-       jsr_eval 1
-.o 4 0
-s12
-       push_a 1
-       build _ 1 n26
-       buildh d4 0
-       build _ 0 n25
-       buildh d6 2
-       push_a 2
-       buildh d12 1
-       push_a 3
-       buildh d9 2
-       build _ 0 n24
-       buildh d6 2
-       buildh d10 2
-       push_a 4
-       push_a 2
-       update_a 1 3
-       update_a 2 1
-       update_a 0 2
-       pop_a 1
-       update_a 2 5
-       update_a 1 4
-       updatepop_a 0 3
-.d 4 0
-       jmp s5
-.n 0 _
-.o 1 0
-n24
-       push_node _cycle_in_spine 0
-.o 0 0
-ea24
-       build _ 0 n22
-       build _ 0 n21
-       buildh e_StdGeneric_dGenConsNoPrio 0
-       buildI 0
-       buildI 2
-       buildAC "_Cons"
-       buildh ARRAY 1
-       push_a 5
-       update_a 3 6
-       update_a 4 3
-       update_a 5 4
-       update_a 0 5
-       pop_a 1
-       fill_r e_StdGeneric_rGenericConsDescriptor 6 0 6 0 0
-       pop_a 6
-.d 1 0
-       rtn
-.n 0 _ ea20
-.o 1 0
-n20
-       push_node _cycle_in_spine 0
-.o 1 0
-ea20
-.o 1 0
-s20
-       buildh _Nil 0
-       build _ 0 n25
-       buildh _Cons 2
-       build _ 0 n24
-       fillh _Cons 2 2
-.d 1 0
-       rtn
-.n 0 _
-.o 1 0
-n21
-       push_node _cycle_in_spine 0
-.o 0 0
-ea21
-       build _ 0 n20
-       buildI 2
-       buildI 1
-       buildAC "_List"
-       buildh ARRAY 1
-       fill_r e_StdGeneric_rGenericTypeDefDescriptor 4 0 4 0 0
-       pop_a 4
-.d 1 0
-       rtn
-.n 0 _
-.o 1 0
-n25
-       push_node _cycle_in_spine 0
-.o 0 0
-ea25
-       build _ 0 n23
-       build _ 0 n21
-       buildh e_StdGeneric_dGenConsNoPrio 0
-       buildI 1
-       buildI 0
-       buildAC "_Nil"
-       buildh ARRAY 1
-       push_a 5
-       update_a 3 6
-       update_a 4 3
-       update_a 5 4
-       update_a 0 5
-       pop_a 1
-       fill_r e_StdGeneric_rGenericConsDescriptor 6 0 6 0 0
-       pop_a 6
-.d 1 0
-       rtn
-.n 0 _ ea22
-.o 1 0
-n22
-       push_node _cycle_in_spine 0
-.o 1 0
-ea22
-.o 1 0
-s22
-       pushI 0
-       buildhr e_StdGeneric_kGenTypeVar 0 1
-       buildAC "_List"
-       buildh ARRAY 1
-       buildh e_StdGeneric_dGenTypeCons 1
-       buildh e_StdGeneric_dGenTypeApp 2
-       pushI 0
-       buildhr e_StdGeneric_kGenTypeVar 0 1
-       buildAC "_List"
-       buildh ARRAY 1
-       buildh e_StdGeneric_dGenTypeCons 1
-       buildh e_StdGeneric_dGenTypeApp 2
-       buildh e_StdGeneric_dGenTypeArrow 2
-       pushI 0
-       buildhr e_StdGeneric_kGenTypeVar 0 1
-       fillh e_StdGeneric_dGenTypeArrow 2 2
-.d 1 0
-       rtn
-.n 0 _ ea23
-.o 1 0
-n23
-       push_node _cycle_in_spine 0
-.o 1 0
-ea23
-.o 1 0
-s23
-       pushI 0
-       buildhr e_StdGeneric_kGenTypeVar 0 1
-       buildAC "_List"
-       buildh ARRAY 1
-       buildh e_StdGeneric_dGenTypeCons 1
-       fillh e_StdGeneric_dGenTypeApp 2 2
-.d 1 0
-       rtn
-.desc d4 _hnf l4 2 0 "gPrint_UNIT;5"
-.a 2 ea4
-.o 2 0
-l4
-       push_args 0 1 1
-       update_a 2 1
-       create
-       update_a 0 3
-       pop_a 1
-.o 3 0
-ea4
-       jsr_eval 1
-.o 3 0
-s4
-       fill_a 1 2
-       pop_a 2
-.d 1 0
-       rtn
-.desc d10 _hnf l10 4 0 "gPrint_EITHER;11"
-.a 4 ea10
-.o 2 0
-l10
-       push_args 0 3 3
-       update_a 4 3
-       create
-       update_a 0 5
-       pop_a 1
-.o 5 0
-ea10
-       jsr_eval 2
-.o 5 0
-s10
-       eq_desc e_StdGeneric_dLEFT 1 2
-       jmp_true case.3
-       jmp case.4
-case.3
-       push_args 2 1 1
-       buildh _Nil 0
-       update_a 0 4
-       pop_a 1
-       push_a 4
-       push_a 2
-       jsr_eval 0
-       push_a 2
-       push_a 1
-       update_a 1 2
-       update_a 0 1
-       pop_a 1
-       update_a 2 7
-       update_a 1 6
-       updatepop_a 0 5
-       jsr_ap 2
-       fill_a 0 1
-       pop_a 1
-.d 1 0
-       rtn
-case.4
-       push_args 2 1 1
-       buildh _Nil 0
-       update_a 0 4
-       pop_a 1
-       push_a 4
-       push_a 3
-       jsr_eval 0
-       push_a 2
-       push_a 1
-       update_a 1 2
-       update_a 0 1
-       pop_a 1
-       update_a 2 7
-       update_a 1 6
-       updatepop_a 0 5
-       jsr_ap 2
-       fill_a 0 1
-       pop_a 1
-.d 1 0
-       rtn
-.n 1 _ ea26
-.o 1 0
-n26
-       push_node _cycle_in_spine 1
-.o 2 0
-ea26
-.o 2 0
-s26
-       eq_desc _Cons 2 0
-       jmp_true case.5
-       jmp case.6
-case.5
-       repl_args 2 2
-       push_a 1
-       push_a 1
-       buildh e_StdGeneric_dPAIR 2
-       buildh e_StdGeneric_dCONS 1
-       fillh e_StdGeneric_dLEFT 1 3
-       pop_a 2
-.d 1 0
-       rtn
-case.6
-       buildh e_StdGeneric_dUNIT 0
-       buildh e_StdGeneric_dCONS 1
-       fillh e_StdGeneric_dRIGHT 1 2
-       pop_a 1
-.d 1 0
-       rtn
-.o 6 0
-s11
-       push_a 3
-       push_a 3
-       buildh _Tuple 2
-       build _ 1 n19
-       push_a 2
-       push_a 2
-       buildh d9 2
-       build _ 0 n18
-       buildh d6 2
-       push_a 6
-       push_a 2
-       update_a 1 3
-       update_a 2 1
-       update_a 0 2
-       pop_a 1
-       update_a 2 7
-       update_a 1 6
-       updatepop_a 0 5
-.d 4 0
-       jmp s5
-.n 0 _ ea15
-.o 1 0
-n15
-       push_node _cycle_in_spine 0
-.o 1 0
-ea15
-.o 1 0
-s15
-       buildh _Nil 0
-       build _ 0 n18
-       fillh _Cons 2 2
-.d 1 0
-       rtn
-.n 0 _
-.o 1 0
-n16
-       push_node _cycle_in_spine 0
-.o 0 0
-ea16
-       build _ 0 n15
-       buildI 1
-       buildI 2
-       buildAC "_Tuple2"
-       buildh ARRAY 1
-       fill_r e_StdGeneric_rGenericTypeDefDescriptor 4 0 4 0 0
-       pop_a 4
-.d 1 0
-       rtn
-.n 0 _
-.o 1 0
-n18
-       push_node _cycle_in_spine 0
-.o 0 0
-ea18
-       build _ 0 n17
-       build _ 0 n16
-       buildh e_StdGeneric_dGenConsNoPrio 0
-       buildI 0
-       buildI 2
-       buildAC "_Tuple2"
-       buildh ARRAY 1
-       push_a 5
-       update_a 3 6
-       update_a 4 3
-       update_a 5 4
-       update_a 0 5
-       pop_a 1
-       fill_r e_StdGeneric_rGenericConsDescriptor 6 0 6 0 0
-       pop_a 6
-.d 1 0
-       rtn
-.n 0 _ ea17
-.o 1 0
-n17
-       push_node _cycle_in_spine 0
-.o 1 0
-ea17
-.o 1 0
-s17
-       pushI 1
-       buildhr e_StdGeneric_kGenTypeVar 0 1
-       pushI 0
-       buildhr e_StdGeneric_kGenTypeVar 0 1
-       buildAC "_Tuple2"
-       buildh ARRAY 1
-       buildh e_StdGeneric_dGenTypeCons 1
-       buildh e_StdGeneric_dGenTypeApp 2
-       buildh e_StdGeneric_dGenTypeApp 2
-       pushI 1
-       buildhr e_StdGeneric_kGenTypeVar 0 1
-       buildh e_StdGeneric_dGenTypeArrow 2
-       pushI 0
-       buildhr e_StdGeneric_kGenTypeVar 0 1
-       fillh e_StdGeneric_dGenTypeArrow 2 2
-.d 1 0
-       rtn
-.desc d6 _hnf l6 4 0 "gPrint_CONS;7"
-.a 4 ea6
-.o 2 0
-l6
-       push_args 0 3 3
-       update_a 4 3
-       create
-       update_a 0 5
-       pop_a 1
-.o 5 0
-ea6
-       jsr_eval 2
-.o 5 0
-s6
-       push_args 2 1 1
-       buildh _Nil 0
-       update_a 0 4
-       pop_a 1
-       push_a 4
-       buildAC ")"
-       buildh ARRAY 1
-       buildh _Cons 2
-       push_a 1
-       push_a 4
-       build _ 3 n66
-       buildAC " "
-       buildh ARRAY 1
-       buildh _Cons 2
-       push_a 2
-       build e_StdGeneric_dGenericConsDescriptor.gcd_name -4 e_StdGeneric_nGenericConsDescriptor.gcd_name
-       buildh _Cons 2
-       buildAC "("
-       buildh ARRAY 1
-       fillh _Cons 2 7
-       pop_a 5
-.d 1 0
-       rtn
-.n 3 _ ea66
-.o 1 0
-n66
-       push_node _cycle_in_spine 3
-.o 4 0
-ea66
-.o 4 0
-s66
-       push_a 2
-       push_a 1
-       jsr_eval 0
-       push_a 3
-       push_a 1
-       update_a 1 2
-       update_a 0 1
-       pop_a 1
-       update_a 2 5
-       update_a 1 4
-       updatepop_a 0 3
-       jsr_ap 2
-       fill_a 0 1
-       pop_a 1
-.d 1 0
-       rtn
-.n 1 _ ea19
-.o 1 0
-n19
-       push_node _cycle_in_spine 1
-.o 2 0
-ea19
-       repl_args 2 2
-.o 3 0
-s19
-       push_a 1
-       push_a 1
-       buildh e_StdGeneric_dPAIR 2
-       fillh e_StdGeneric_dCONS 1 3
-       pop_a 2
-.d 1 0
-       rtn
-.o 4 0
-s5
-       push_a 2
-       push_a 2
-       push_a 2
-       update_a 2 5
-       update_a 1 4
-       updatepop_a 0 3
-       jsr_ap 2
-       fill_a 0 1
-       pop_a 1
-.d 1 0
-       rtn
-.desc d8 _hnf l8 4 0 "gPrint_FIELD;9"
-.a 4 ea8
-.o 2 0
-l8
-       push_args 0 3 3
-       update_a 4 3
-       create
-       update_a 0 5
-       pop_a 1
-.o 5 0
-ea8
-.o 5 0
-s8
-       push_a 3
-       push_a 3
-       push_a 3
-       build _ 3 n67
-       buildAC "="
-       buildh ARRAY 1
-       buildh _Cons 2
-       push_a 1
-       build e_StdGeneric_dGenericFieldDescriptor.gfd_name -4 e_StdGeneric_nGenericFieldDescriptor.gfd_name
-       fillh _Cons 2 6
-       pop_a 4
-.d 1 0
-       rtn
-.n 3 _ ea67
-.o 1 0
-n67
-       push_node _cycle_in_spine 3
-.o 4 0
-ea67
-.o 4 0
-s67
-       push_a 2
-       push_a 1
-       jsr_eval 0
-       push_a 3
-       push_a 1
-       update_a 1 2
-       update_a 0 1
-       pop_a 1
-       update_a 2 5
-       update_a 1 4
-       updatepop_a 0 3
-       jsr_ap 2
-       fill_a 0 1
-       pop_a 1
-.d 1 0
-       rtn
-.desc d9 _hnf l9 4 0 "gPrint_PAIR;10"
-.a 4 ea9
-.o 2 0
-l9
-       push_args 0 3 3
-       update_a 4 3
-       create
-       update_a 0 5
-       pop_a 1
-.o 5 0
-ea9
-       jsr_eval 2
-       jsr_eval 0
-.o 5 0
-s9
-       push_args 2 2 2
-       buildh _Nil 0
-       update_a 0 5
-       pop_a 1
-       push_a 5
-       push_a 2
-       push_a 5
-       build _ 3 n68
-       buildAC " "
-       buildh ARRAY 1
-       buildh _Cons 2
-       push_a 1
-       push_a 4
-       update_a 2 8
-       update_a 1 7
-       updatepop_a 0 6
-       jsr_ap 2
-       fill_a 0 1
-       pop_a 1
-.d 1 0
-       rtn
-.n 3 _ ea68
-.o 1 0
-n68
-       push_node _cycle_in_spine 3
-.o 4 0
-ea68
-.o 4 0
-s68
-       push_a 2
-       push_a 1
-       jsr_eval 0
-       push_a 3
-       push_a 1
-       update_a 1 2
-       update_a 0 1
-       pop_a 1
-       update_a 2 5
-       update_a 1 4
-       updatepop_a 0 3
-       jsr_ap 2
-       fill_a 0 1
-       pop_a 1
-.d 1 0
-       rtn
-.o 3 0
-s39
-       push_a 1
-       push_a 1
-       buildh e_StdGeneric_dPAIR 2
-       fillh e_StdGeneric_dRECORD 1 3
-       pop_a 2
-.d 1 0
-       rtn
-.o 5 0
-s7
-       push_args 2 1 1
-       buildh _Nil 0
-       update_a 0 4
-       pop_a 1
-       push_a 4
-       buildAC "}"
-       buildh ARRAY 1
-       buildh _Cons 2
-       push_a 1
-       push_a 4
-       build _ 3 n69
-       buildAC "{"
-       buildh ARRAY 1
-       fillh _Cons 2 7
-       pop_a 5
-.d 1 0
-       rtn
-.n 3 _ ea69
-.o 1 0
-n69
-       push_node _cycle_in_spine 3
-.o 4 0
-ea69
-.o 4 0
-s69
-       push_a 2
-       push_a 1
-       jsr_eval 0
-       push_a 3
-       push_a 1
-       update_a 1 2
-       update_a 0 1
-       pop_a 1
-       update_a 2 5
-       update_a 1 4
-       updatepop_a 0 3
-       jsr_ap 2
-       fill_a 0 1
-       pop_a 1
-.d 1 0
-       rtn
diff --git a/lst/Clean System Files/generic_print.o b/lst/Clean System Files/generic_print.o
deleted file mode 100644 (file)
index e3c666c..0000000
Binary files a/lst/Clean System Files/generic_print.o and /dev/null differ
diff --git a/lst/expr_gadt b/lst/expr_gadt
deleted file mode 100755 (executable)
index 74ccb95..0000000
Binary files a/lst/expr_gadt and /dev/null differ
diff --git a/lst/generic_eq b/lst/generic_eq
deleted file mode 100755 (executable)
index c6b0b1d..0000000
Binary files a/lst/generic_eq and /dev/null differ
diff --git a/lst/generic_print b/lst/generic_print
deleted file mode 100755 (executable)
index 9f21abd..0000000
Binary files a/lst/generic_print and /dev/null differ
diff --git a/lst/generic_print.icl b/lst/generic_print.icl
deleted file mode 100644 (file)
index 36e3e58..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-module generic_print
-import StdEnv, StdGeneric
-
-generic gPrint a :: a [String] -> [String]
-
-gPrint{|Int|}                   x         acc = [toString x:acc]
-gPrint{|Bool|}                  x         acc = [toString x:acc]
-gPrint{|Real|}                  x         acc = [toString x:acc]
-gPrint{|Char|}                  x         acc = [toString x:acc]
-gPrint{|UNIT|}                  x         acc = acc
-gPrint{|OBJECT|}         f     (OBJECT x) acc = f x acc
-gPrint{|CONS of gcd|}    f     (CONS x)   acc = ["(",gcd.gcd_name, " ":f x [")":acc]]
-gPrint{|RECORD of grd|}  f     (RECORD x) acc = ["{":f x ["}":acc]]
-gPrint{|FIELD of gfd|}   f     (FIELD x)  acc = [gfd.gfd_name, "=":f x acc]
-gPrint{|PAIR|}           fl fr (PAIR l r) acc = fl l [" ":fr r acc]
-gPrint{|EITHER|}         fl _  (LEFT x)   acc = fl x acc
-gPrint{|EITHER|}         _  fr (RIGHT x)  acc = fr x acc
-
-:: T = {f1 :: Int, f2 :: (Real, [?Int])}
-derive gPrint (,), [], ?, T
-
-Start = gPrint{|*|} {f1=42, f2=(3.14, [?None])} []
-// {f1=42 f2=(_Tuple2 3.14 (_Cons (_!None ) (_Nil )))}
diff --git a/lstlangclean.sty b/lstlangclean.sty
new file mode 100644 (file)
index 0000000..8067354
--- /dev/null
@@ -0,0 +1,18 @@
+\lstdefinelanguage{Clean}{%
+       alsoletter={ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_`1234567890},
+       alsoletter={~!@\#$\%^\&*-+=?<>:|\\.},
+       alsoother={.},
+       alsodigit={1234567890},
+       morekeywords={generic,implementation,definition,dynamic,module,import,where,in,of,case,let,infix,infixr,infixl,class,instance,with,if,derive,code,In,qualified,otherwise,from,foreign,export,ccall,stdcall},
+       sensitive=true,
+       morecomment=[l]{//},
+       morecomment=[n]{/*}{*/},
+       morestring=[b]",
+       morestring=[s]{['}{']},
+       literate=%
+               {\_}{{\raisebox{.15ex}{\_}}}1
+               {~}{{\raisebox{-.6ex}{\textasciitilde}}}1
+               {...}{{$\cdots$}}1
+               {->}{{$\shortrightarrow$}}2
+               {=>}{{$\Rightarrow$}}2
+}
diff --git a/lstlanghaskell.sty b/lstlanghaskell.sty
new file mode 100644 (file)
index 0000000..d8f1d6b
--- /dev/null
@@ -0,0 +1,20 @@
+\lstdefinestyle{haskell}{%
+       language=Haskell,
+       deletekeywords={%
+               True,False,%
+               Bool,Int,Integer,Float,Double,String,%
+               Maybe,Nothing,Just,%
+               zip,length,Show,show,Num,Eq,print,%
+               id},
+       morekeywords={forall},
+       literate=%
+               {\_}{{\raisebox{.15ex}{\_}}}1
+               {~}{{\raisebox{-.6ex}{\textasciitilde}}}1
+               {\\}{{$\lambda\:$}}1
+               {->}{{$\shortrightarrow$}}2
+               {<-}{{$\shortleftarrow$}}2
+               {=>}{{$\Rightarrow$}}2
+               {<=}{{$\Leftarrow$}}2
+               {'}{{`}}1
+               {...}{{$\cdots$}}1 %chktex 11
+}
index a8baf2b..d9e38e2 100644 (file)
@@ -17,6 +17,9 @@
 % Font encoding
 \usepackage[T1,T2A]{fontenc}
 
+% standalone figures
+\usepackage[subpreambles=true]{standalone}
+
 % Less bad boxes
 \usepackage{microtype}
 
@@ -24,7 +27,7 @@
 \usepackage{morewrites}
 
 % Internationalisation
-\usepackage[british]{babel}
+\usepackage[dutch,russian,british]{babel}
 %\babelfont[russian]{rm}{Liberation Serif}
 
 % Appendices
        pdfkeywords={task oriented programming, functional programming, domain specific languages, internet of things},
        hidelinks,
 }
+\urlstyle{same}
 
 % Graphics
 \usepackage{graphicx}
 % Images directory
 \graphicspath{{img/}}
+%subfigures
+\usepackage{caption}
+\usepackage{subcaption}
 
 % Nice tables
 \usepackage{booktabs}
@@ -64,7 +71,7 @@
 \usepackage{listings}
 % General listings settings
 \lstset{%
-       basewidth=0.43em,
+       basewidth=0.45em,
        basicstyle=\linespread{0.9}\tt\footnotesize,
        breakatwhitespace=false,
        breaklines=true,
        showtabs=false,
        stringstyle=\it,
        tabsize=4,
-       literate=%
-               {~}{$\sim$}1
-               {\\}{{$\lambda\:$}}1
-               {->}{{$\shortrightarrow$}}2
-               {<-}{{$\shortleftarrow$}}2
-               {=>}{{$\Rightarrow$}}2
-               {<=}{{$\Leftarrow$}}2
-               {'}{{`}}1
-               {...}{{$\cdots$}}1 %chktex 11
-               {a0}{{a\textsubscript{0}}}2
-               {a1}{{a\textsubscript{1}}}2
-               {a2}{{a\textsubscript{2}}}2
-%              {an}{{a\textsubscript{n}}}2
-               {c0}{{c\textsubscript{0}}}2
-               {c1}{{c\textsubscript{1}}}2
-               {c2}{{c\textsubscript{2}}}2
-               {cn}{{c\textsubscript{n}}}2
-               {f0}{{f\textsubscript{0}}}2
-               {f1}{{f\textsubscript{1}}}2
-               {f2}{{f\textsubscript{2}}}2
-               {fn}{{f\textsubscript{n}}}2
-               {t0}{{t\textsubscript{0}}}2
-               {t1}{{t\textsubscript{1}}}2
-               {t2}{{t\textsubscript{2}}}2
-               {tn}{{t\textsubscript{n}}}2
-               {v0}{{v\textsubscript{0}}}2
-               {v1}{{v\textsubscript{1}}}2
-               {v2}{{v\textsubscript{2}}}2
-               {vn}{{v\textsubscript{n}}}2
-               {C0}{{C\textsubscript{0}}}2
-               {C1}{{C\textsubscript{1}}}2
-               {C2}{{C\textsubscript{2}}}2
-               {Cn}{{C\textsubscript{n}}}2
-               {R0}{{R\textsubscript{0}}}2
-               {R1}{{R\textsubscript{1}}}2
-               {R2}{{R\textsubscript{2}}}2
-               {Rn}{{R\textsubscript{n}}}2
-}
-\lstdefinestyle{haskell}{%
-       language=Haskell,
-       deletekeywords={True,False,Bool,Int,Float,Double,zip,length,Show,show,Num,Eq,print,String},
-}
-\lstdefinelanguage{Clean}{%
-       alsoletter={ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_`1234567890},
-       alsoletter={~!@\#$\%^\&*-+=?<>:|\\.},
-       morekeywords={generic,implementation,definition,dynamic,module,import,from,where,in,of,case,let,infix,infixr,infixl,class,instance,with,if,derive,code,In,qualified,otherwise},
-       sensitive=true,
-       morecomment=[l]{//},
-       morecomment=[n]{/*}{*/},
-       morestring=[b]",        % chktex 18
-       morestring=[s]{['}{']}, % chktex 9
+%      literate=%
+%              {a0}{{a\textsubscript{0}}}2
+%              {a1}{{a\textsubscript{1}}}2
+%              {a2}{{a\textsubscript{2}}}2
+%%             {an}{{a\textsubscript{n}}}2
+%              {c0}{{c\textsubscript{0}}}2
+%              {c1}{{c\textsubscript{1}}}2
+%              {c2}{{c\textsubscript{2}}}2
+%              {cn}{{c\textsubscript{n}}}2
+%              {f0}{{f\textsubscript{0}}}2
+%              {f1}{{f\textsubscript{1}}}2
+%              {f2}{{f\textsubscript{2}}}2
+%              {fn}{{f\textsubscript{n}}}2
+%              {t0}{{t\textsubscript{0}}}2
+%              {t1}{{t\textsubscript{1}}}2
+%              {t2}{{t\textsubscript{2}}}2
+%              {tn}{{t\textsubscript{n}}}2
+%              {v0}{{v\textsubscript{0}}}2
+%              {v1}{{v\textsubscript{1}}}2
+%              {v2}{{v\textsubscript{2}}}2
+%              {vn}{{v\textsubscript{n}}}2
+%              {C0}{{C\textsubscript{0}}}2
+%              {C1}{{C\textsubscript{1}}}2
+%              {C2}{{C\textsubscript{2}}}2
+%              {Cn}{{C\textsubscript{n}}}2
+%              {R0}{{R\textsubscript{0}}}2
+%              {R1}{{R\textsubscript{1}}}2
+%              {R2}{{R\textsubscript{2}}}2
+%              {Rn}{{R\textsubscript{n}}}2
 }
+\usepackage{lstlangclean}
+\usepackage{lstlanghaskell}
 \newcommand{\cleaninline}[1]{\lstinline[language=Clean,postbreak=]|#1|}
 \newcommand{\haskellinline}[1]{\lstinline[language=Haskell,style=haskell,postbreak=]|#1|}
 % Fix list of listings title
 % Easy references
 \usepackage{cleveref}
 
-% Diagrams
-\usepackage{tikz}
-\usetikzlibrary{pie}
-
 % To patch the chapter command
 \usepackage{etoolbox}
 % Have better page numbering in chapters
 \newcommand{\GHCmod}[1]{\texttt{#1}}
 \newcommand{\requiresGHCmod}[1]{\footnote{Requires \GHCmod{#1} to be enabled.}}
 \newcommand{\etc}{{\fontfamily{cmr}\selectfont{\itshape\/\&c}}}
+\newcommand{\rdmentry}[6]{#1: #2 (#3): #4. #5.\ \href{https://doi.org/#6}{#6}}
+\newcommand{\mlubbers}{Lubbers, M.\ (Radboud University)}
+\newcommand{\pkoopman}{Koopman, dr.\ P.\ (Radboud University)}
+\newcommand{\rplasmeijer}{Plasmeijer, prof.\ dr.\ ir.\ R.\ (Radboud University)}
+
+\bibliographystyle{alpha}
+
+\usepackage{subfiles}
diff --git a/research_data_management.tex b/research_data_management.tex
deleted file mode 100644 (file)
index 84b92de..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-This thesis research has been carried out under the research data management policy of the Institute for Computing and Information Science of Radboud University, the Netherlands\footnote{\href{https://www.ru.nl/icis/research-data-management/}{ru.nl/icis/research-data-management/}, last accessed \formatdate{20}{1}{2020}.}.
-
-The following research datasets have been produced during this PhD research:
-\todo{reference correct chapters}
-\begin{itemize}
-       \item Chapter 0: Koopman, dr.\ P.\ (Radboud University); Lubbers, M.\ (Radboud University); Plasmeijer, prof.~dr.~ir.\ R.\ (Radboud University) (2020): Source code for the mTask language. DANS.\ \href{https://doi.org/10.17026/dans-xx4-8zs9}{10.17026/dans-xx4-8zs9}
-       \item Chapter 0: Lubbers, M.\ (Radboud University); Koopman, dr.\ P.\ (Radboud University); Plasmeijer, prof.~dr.~ir.\ R.\ (Radboud University) (2020): Source code for a simplified mTask language integrated with the iTask system. DANS.\ \href{https://doi.org/10.17026/dans-xv6-fvxd}{10.17026/dans-xv6-fvxd}
-       \item Chapter 0: Lubbers, M.\ (Radboud University); Koopman, dr.\ P.\ (Radboud University); Plasmeijer, prof.~dr.~ir.\ R.\ (Radboud University) (2020): Source code for the multitasking mTask language integrated with the iTask system. DANS.\ \href{https://doi.org/10.17026/dans-x2y-rtxx}{10.17026/dans-x2y-rtxx}
-       \item Chapter 0: Lubbers, M.\ (Radboud University); Koopman, dr.\ P.\ (Radboud University); Ramsingh, A.\ (University of Glasgow); Singer, dr.\ J.\ (University of Glasgow); Trinder, prof.~dr.\ P.\ (University of Glasgow) (2021): Source code of the PRSS and CWSS applications. DANS.\ \href{https://doi.org/10.17026/dans-zvf-4p9m}{10.17026/dans-zvf-4p9m}
-       \item Chapter 0: Lubbers, M.\ (Radboud University); Koopman, dr.\ P.\ (Radboud University); Plasmeijer, prof.~dr.~ir.\ R.\ (Radboud University) (2021): Source code for the interpreted mTask language. DANS.\ \href{https://doi.org/10.17026/dans-zrn-2wv3}{10.17026/dans-zrn-2wv3}
-       \item \ldots
-\end{itemize}
diff --git a/samenvatting.tex b/samenvatting.tex
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/subfilepostamble.tex b/subfilepostamble.tex
new file mode 100644 (file)
index 0000000..a39661c
--- /dev/null
@@ -0,0 +1,5 @@
+\ifSubfilesClassLoaded{%
+       \bibliography{../thesis}
+}{
+
+}
diff --git a/summary.tex b/summary.tex
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/task_oriented_programming.tex b/task_oriented_programming.tex
deleted file mode 100644 (file)
index 91b08e9..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-\chapter{\gls{MTASK} tutorial}
-Hiermee beginnen, dan is het gelijk duidelijk hoe mTask werkt, dan zijn de volgende chapters implementatie dingen.
-
-CEFP19 lecture notes. Dit evt.\ ook gecombineerd met energy aware \gls{TOP} programming en CEFP22 lecture notes.
-
-\chapter{Energy aware TOP programming}
-Paper van Sjoerds thesis
-
-\chapter{Integrating \gls{MTASK} with \gls{ITASK}}
-IFL18 paper
-
-\chapter{Interpreting \acrlong{TOP} programs on microcontrollers}
-IFL19 paper
-
-4COWS paper
diff --git a/task_oriented_programming/integration.tex b/task_oriented_programming/integration.tex
new file mode 100644 (file)
index 0000000..24b2818
--- /dev/null
@@ -0,0 +1,12 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{arabic}
+}{}
+
+\chapter{Integrating mTask tasks with iTask}
+IFL18 paper
+
+\input{subfilepostamble}
+\end{document}
diff --git a/task_oriented_programming/interpreting.tex b/task_oriented_programming/interpreting.tex
new file mode 100644 (file)
index 0000000..4836793
--- /dev/null
@@ -0,0 +1,15 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{arabic}
+}{}
+
+\chapter{Executing mTask tasks on microcontrollers}
+IFL19 paper
+4COWS paper
+
+Paper van Sjoerds thesis
+
+\input{subfilepostamble}
+\end{document}
diff --git a/task_oriented_programming/mtask.tex b/task_oriented_programming/mtask.tex
new file mode 100644 (file)
index 0000000..9fc93af
--- /dev/null
@@ -0,0 +1,12 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{arabic}
+}{}
+
+\chapter{The mTask DSL}
+RWDSL paper
+
+\input{subfilepostamble}
+\end{document}
diff --git a/task_oriented_programming/mtask_by_example.tex b/task_oriented_programming/mtask_by_example.tex
new file mode 100644 (file)
index 0000000..48d4590
--- /dev/null
@@ -0,0 +1,14 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{arabic}
+}{}
+
+\chapter{mTask by example}
+Hiermee beginnen, dan is het gelijk duidelijk hoe mTask werkt, dan zijn de volgende chapters implementatie dingen.
+
+CEFP19 lecture notes. Dit evt.\ ook gecombineerd met energy aware \gls{TOP} programming en CEFP22 lecture notes.
+
+\input{subfilepostamble}
+\end{document}
index 7a30ee4..ffdf65f 100644 (file)
@@ -317,14 +317,6 @@ Publisher: Association for Computing Machinery},
        file = {Elliott et al. - 2003 - Compiling embedded languages.pdf:/home/mrl/.local/share/zotero/storage/3X4Z6AKB/Elliott et al. - 2003 - Compiling embedded languages.pdf:application/pdf},
 }
 
-@book{fowler_domain-specific_2010,
-       title = {Domain-specific languages},
-       publisher = {Pearson Education},
-       author = {Fowler, Martin},
-       year = {2010},
-       file = {Fowler - 2010 - Domain-specific languages.pdf:/home/mrl/.local/share/zotero/storage/YYMYXTZ5/Fowler - 2010 - Domain-specific languages.pdf:application/pdf},
-}
-
 @inproceedings{hudak_modular_1998,
        title = {Modular domain specific languages and tools},
        doi = {10.1109/ICSR.1998.685738},
@@ -389,3 +381,76 @@ Publisher: Association for Computing Machinery},
        pages = {19--38},
        file = {Stutterheim et al. - 2018 - Maintaining Separation of Concerns Through Task Or.pdf:/home/mrl/.local/share/zotero/storage/4GXJEM2U/Stutterheim et al. - 2018 - Maintaining Separation of Concerns Through Task Or.pdf:application/pdf},
 }
+
+@book{fowler_domain_2010,
+       edition = {1st},
+       title = {Domain {Specific} {Languages}},
+       isbn = {0-321-71294-3},
+       abstract = {Designed as a wide-ranging guide to Domain Specific Languages (DSLs) and how to approach building them, this book covers a variety of different techniques available for DSLs. The goal is to provide readers with enough information to make an informed choice about whether or not to use a DSL and what kinds of DSL techniques to employ. Part I is a 150-page narrative overview that gives you a broad understanding of general principles. The reference material in Parts II through VI provides the details and examples you willneed to get started using the various techniques discussed. Both internal and external DSL topics are covered, in addition to alternative computational models and code generation. Although the general principles and patterns presented can be used with whatever programming language you happen to be using, most of the examples are in Java or C\#.},
+       publisher = {Addison-Wesley Professional},
+       author = {Fowler, Martin},
+       year = {2010},
+       file = {Fowler - 2010 - Domain-specific languages.pdf:/home/mrl/.local/share/zotero/storage/YYMYXTZ5/Fowler - 2010 - Domain-specific languages.pdf:application/pdf},
+}
+
+@misc{peter_t_lewis_speech_1985,
+       address = {Washington, D.C.},
+       type = {Speech},
+       title = {Speech},
+       url = {http://www.chetansharma.com/correcting-the-iot-history/},
+       author = {{Peter T. Lewis}},
+       month = sep,
+       year = {1985},
+}
+
+@article{weiser_computer_1991,
+       title = {The {Computer} for the 21 st {Century}},
+       volume = {265},
+       language = {en},
+       number = {3},
+       journal = {Scientific American},
+       author = {Weiser, Mark},
+       month = sep,
+       year = {1991},
+       pages = {94--105},
+       file = {Weiser - 1991 - The Computer for the 21 st Century.pdf:/home/mrl/.local/share/zotero/storage/N5456M2M/Weiser - 1991 - The Computer for the 21 st Century.pdf:application/pdf},
+}
+
+@misc{evans_internet_2011,
+       title = {The {Internet} of {Things}: {How} the {Next} {Evolution} of the {Internet} {Is} {Changing} {Everything}},
+       url = {https://www.cisco.com/c/dam/en_us/about/ac79/docs/innov/IoT_IBSG_0411FINAL.pdf},
+       language = {en},
+       publisher = {Cisco Internet Business Solutions Group (IBSG)},
+       author = {Evans, Dave},
+       month = apr,
+       year = {2011},
+       file = {Evans - 2011 - How the Next Evolution of the Internet Is Changing.pdf:/home/mrl/.local/share/zotero/storage/32YXCM6P/Evans - 2011 - How the Next Evolution of the Internet Is Changing.pdf:application/pdf},
+}
+
+@inproceedings{ireland_classification_2009,
+       address = {Cancun, Mexico},
+       title = {A {Classification} of {Object}-{Relational} {Impedance} {Mismatch}},
+       isbn = {978-0-7695-3550-0},
+       doi = {10.1109/DBKDA.2009.11},
+       booktitle = {First {International} {Conference} on {Advances} in {Databases}, {Knowledge}, and {Data} {Applications}},
+       publisher = {IEEE},
+       author = {Ireland, Christopher and Bowers, David and Newton, Michael and Waugh, Kevin},
+       year = {2009},
+       pages = {36--43},
+}
+
+@incollection{hinze_generic_2003,
+       address = {Berlin, Heidelberg},
+       title = {Generic {Haskell}: {Practice} and {Theory}},
+       isbn = {978-3-540-45191-4},
+       url = {https://doi.org/10.1007/978-3-540-45191-4_1},
+       abstract = {Generic Haskell is an extension of Haskell that supports the construction of generic programs. These lecture notes describe the basic constructs of Generic Haskell and highlight the underlying theory.},
+       booktitle = {Generic {Programming}: {Advanced} {Lectures}},
+       publisher = {Springer Berlin Heidelberg},
+       author = {Hinze, Ralf and Jeuring, Johan},
+       editor = {Backhouse, Roland and Gibbons, Jeremy},
+       year = {2003},
+       doi = {10.1007/978-3-540-45191-4_1},
+       pages = {1--56},
+       file = {Hinze and Jeuring - Generic Haskell practice and theory.pdf:/home/mrl/.local/share/zotero/storage/QDRNI5VB/Hinze and Jeuring - Generic Haskell practice and theory.pdf:application/pdf},
+}
index e94ba89..3a48285 100644 (file)
@@ -10,9 +10,6 @@
 % To show hboxes even when in non-draft mode
 \overfullrule=1mm
 
-% Just for the blind text, can go when it's finished
-\usepackage{lipsum}
-
 % Just for the todonotes, can go when it's finished
 \usepackage{todonotes}
 \setuptodonotes{
 \date{\mydate}
 
 \begin{document}
+\selectlanguage{british}
+
 \frontmatter%
 %\addtitlethumb{Frontmatter}{}{white}{gray}{pagesLTS.0}
 
 %Titlepage
-\input{titlepage}
+\subfile{frontmatter/titlepage}
 \newpage%
 
 % Epigraph/motto
-\input{motto}
+\subfile{frontmatter/motto}
 
 % Table of contents
 \tableofcontents
 \newpage%
 
 % Dedication
-\input{dedication}
+\subfile{frontmatter/dedication}
 
 \listoftodos%
 
 \addthumb{Chapters}{\arabic{chapter}}{white}{gray}
 \setcounter{chapter}{-1}
 
-\chapter{Introduction}%
-\label{chp:introduction}
-\input{introduction}
-
-\part{\glst{DSL}}%
+% Introduction
+\subfile{introduction/introduction}
+% DSL
+\part{Domain-Specific Languages}%
 \label{prt:dsl}
-\input{domain_specific_languages}
 
-\part{\glst{TOP}}%
+% DSL Techniques
+\subfile{domain_specific_languages/dsl_techniques}
+
+% Deep embedding with class
+\subfile{domain_specific_languages/class_deep_embedding}
+
+% First-class data types
+\subfile{domain_specific_languages/first-class_datatypes}
+
+\part{Task-Oriented Programming}%
 \label{prt:top}
-\input{task_oriented_programming}
 
-\part{\glst{IOT}}%
-\label{prt:iot}
-\input{internet_of_things}
+% mTask by example
+\subfile{task_oriented_programming/mtask_by_example}
+
+% Interpreting
+\subfile{task_oriented_programming/interpreting}
+
+% Integration
+\subfile{task_oriented_programming/integration}
+
+\part{Tiered vs.\ tierless programming}%
+\label{prt:tvt}
+
+\subfile{tiered_vs._tierless_programming/smart_campus}
+
+\chapter{Modelling naval scenaries using \acrshort{TOP} and \acrshort{IOT}}
+Arjan's werk {NLARMS}?
 
 % Start appendix
 \appendix%
 \label{chp:appendix}
 \addthumb{Appendices}{\Alph{chapter}}{white}{gray}
 
-\chapter{\glsentrytext{CLEAN} for \glsentrytext{HASKELL} Programmers}%
-\label{chp:clean_for_haskell_programmers}
-\input{appendix/clean_for_haskell_programmers.tex}
+\subfile{appendix/clean_for_haskell_programmers.tex}
 
 \backmatter%
 \addtitlethumb{Backmatter}{}{white}{gray}{pagesLTS.0}
 \phantomsection{}%
 \label{chp:bibliography}
 \addcontentsline{toc}{chapter}{Bibliography}
-\bibliographystyle{alpha}
 \bibliography{thesis}
 
-% Abstract
-\chapter{Summary}%
-\label{chp:summary}
-\begin{center}
-       \noindent\input{summary}
-\end{center}
+% Summary
+\subfile{backmatter/summary}
 
 % Samenvatting
-\chapter{Samenvatting}%
-\label{chp:samenvatting}
-\begin{center}
-       \noindent\input{samenvatting}
-\end{center}
+\subfile{backmatter/samenvatting}
 
 % Acknowledgements
-\chapter{Acknowledgements}%
-\label{chp:acknowledgements}
-\begin{center}
-       \noindent\input{acknowledgements}
-\end{center}
-
-\chapter{Research Data Management}%
-\label{chp:research_data_management}
-\input{research_data_management}
-
-% Curriculum Vitae
-\chapter{Curriculum Vit\ae}%
-\label{chp:curriculum_vitae}
-\input{curriculum_vitae}
+\subfile{backmatter/acknowledgements}
+
+% Research data management
+\subfile{backmatter/research_data_management}
+
+% Curriculum vitæ
+\subfile{backmatter/curriculum_vitae}
 
 % Glossary
 \addcontentsline{toc}{chapter}{Glossary}%
diff --git a/tiered_vs._tierless_programming/smart_campus.tex b/tiered_vs._tierless_programming/smart_campus.tex
new file mode 100644 (file)
index 0000000..ce6405e
--- /dev/null
@@ -0,0 +1,12 @@
+\documentclass[../thesis.tex]{subfiles}
+
+\begin{document}
+\ifSubfilesClassLoaded{
+       \pagenumbering{arabic}
+}{}
+
+\chapter{Smart campus application}
+IOT2020/TIOT papers
+
+\input{subfilepostamble}
+\end{document}