migrate to biblatex
authorMart Lubbers <mart@martlubbers.net>
Mon, 6 Mar 2023 15:08:30 +0000 (16:08 +0100)
committerMart Lubbers <mart@martlubbers.net>
Mon, 6 Mar 2023 15:08:30 +0000 (16:08 +0100)
12 files changed:
.gitignore
bib/other.bib
bib/self.bib
bib/tiot.bib
intro/intro.tex
preamble.tex
preamble/bibliography.tex
preamble/crossref.tex
preamble/typography.tex
thesis.tex
top/finale.tex
tvt/tvt.tex

index eb7a4b6..2fa4bb5 100644 (file)
@@ -4,6 +4,7 @@
 *.alg
 *.aux
 *.bbl
+*.bcf
 *.blg
 *.brf
 *.fdb_latexmk
@@ -27,6 +28,7 @@
 *.mw
 *.nav
 *.out
+*.run.xml
 *.snm
 *.sta
 *.synctex*
index 0e77223..5aa53d0 100644 (file)
-@PREAMBLE{ {\providecommand{\noopsort}[2]{#2} } }
+
 @inproceedings{suchocki_microscheme:_2015,
-       address = {Washington DC, USA},
-       series = {{CS} {Techreport} 718},
-       title = {Microscheme: {Functional} programming for the {Arduino}},
-       booktitle = {Proceedings of the 2014 {Scheme} and {Functional} {Programming} {Workshop}},
+       location = {Washington {DC}, {USA}},
+       title = {Microscheme: Functional programming for the Arduino},
+       series = {{CS} Techreport 718},
+       eventtitle = {Scheme and Functional Programming Workshop},
+       pages = {9},
+       booktitle = {Proceedings of the 2014 Scheme and Functional Programming Workshop},
        publisher = {University of Indiana},
        author = {Suchocki, Ryan and Kalvala, Sara},
-       year = {2015},
-       pages = {9},
+       date = {2015},
        file = {Suchocki and Kalvala - 2015 - Microscheme Functional programming for the Arduin.pdf:/home/mrl/.local/share/zotero/storage/DDQZ9LP7/Suchocki and Kalvala - 2015 - Microscheme Functional programming for the Arduin.pdf:application/pdf},
 }
 
-@mastersthesis{crooijmans_reducing_2021,
-       address = {Nijmegen},
-       title = {Reducing the {Power} {Consumption} of {IoT} {Devices} in {Task}-{Oriented} {Programming}},
-       language = {en},
-       school = {Radboud University},
+@thesis{crooijmans_reducing_2021,
+       location = {Nijmegen},
+       title = {Reducing the Power Consumption of {IoT} Devices in Task-Oriented Programming},
+       pagetotal = {78},
+       institution = {Radboud University},
+       type = {Master's Thesis},
        author = {Crooijmans, Sjoerd},
-       month = jul,
-       year = {2021},
+       date = {2021-07},
+       langid = {english},
        file = {Crooijmans - 2021 - Reducing the Power Consumption of IoT Devices in T.pdf:/home/mrl/.local/share/zotero/storage/98LY9YHH/Crooijmans - 2021 - Reducing the Power Consumption of IoT Devices in T.pdf:application/pdf},
 }
 
 @inproceedings{plasmeijer_task-oriented_2012,
-       address = {New York, NY, USA},
-       series = {{PPDP} '12},
-       title = {Task-{Oriented} {Programming} in a {Pure} {Functional} {Language}},
+       location = {New York, {NY}, {USA}},
+       title = {Task-Oriented Programming in a Pure Functional Language},
        isbn = {978-1-4503-1522-7},
        doi = {10.1145/2370776.2370801},
-       abstract = {Task-Oriented Programming (TOP) is a novel programming paradigm for the construction of distributed systems where users work together on the internet. When multiple users collaborate, they need to interact with each other frequently. TOP supports the definition of tasks that react to the progress made by others. With TOP, complex multi-user interactions can be programmed in a declarative style just by defining the tasks that have to be accomplished, thus eliminating the need to worry about the implementation detail that commonly frustrates the development of applications for this domain. TOP builds on four core concepts: tasks that represent computations or work to do which have an observable value that may change over time, data sharing enabling tasks to observe each other while the work is in progress, generic type driven generation of user interaction, and special combinators for sequential and parallel task composition. The semantics of these core concepts is defined in this paper. As an example we present the iTask3 framework, which embeds TOP in the functional programming language Clean.},
-       booktitle = {Proceedings of the 14th {Symposium} on {Principles} and {Practice} of {Declarative} {Programming}},
-       publisher = {ACM},
+       series = {{PPDP} '12},
+       abstract = {Task-Oriented Programming ({TOP}) is a novel programming paradigm for the construction of distributed systems where users work together on the internet. When multiple users collaborate, they need to interact with each other frequently. {TOP} supports the definition of tasks that react to the progress made by others. With {TOP}, complex multi-user interactions can be programmed in a declarative style just by defining the tasks that have to be accomplished, thus eliminating the need to worry about the implementation detail that commonly frustrates the development of applications for this domain. {TOP} builds on four core concepts: tasks that represent computations or work to do which have an observable value that may change over time, data sharing enabling tasks to observe each other while the work is in progress, generic type driven generation of user interaction, and special combinators for sequential and parallel task composition. The semantics of these core concepts is defined in this paper. As an example we present the {iTask}3 framework, which embeds {TOP} in the functional programming language Clean.},
+       pages = {195--206},
+       booktitle = {Proceedings of the 14th Symposium on Principles and Practice of Declarative Programming},
+       publisher = {{ACM}},
        author = {Plasmeijer, Rinus and Lijnse, Bas and Michels, Steffen and Achten, Peter and Koopman, Pieter},
-       year = {2012},
+       date = {2012},
        note = {event-place: Leuven, Belgium},
        keywords = {clean, task-oriented programming},
-       pages = {195--206},
        file = {103802.pdf:/home/mrl/.local/share/zotero/storage/ZE6A65AW/103802.pdf:application/pdf},
 }
 
 @inproceedings{brus_clean_1987,
-       address = {Berlin, Heidelberg},
-       title = {Clean — {A} language for functional graph rewriting},
+       location = {Berlin, Heidelberg},
+       title = {Clean — A language for functional graph rewriting},
        isbn = {978-3-540-47879-9},
-       abstract = {Clean is an experimental language for specifying functional computations in terms of graph rewriting. It is based on an extension of Term Rewriting Systems (TRS) in which the terms are replaced by graphs. Such a Graph Rewriting System (GRS) consists of a, possibly cyclic, directed graph, called the data graph and graph rewrite rules which specify how this data graph may be rewritten. Clean is designed to provide a firm base for functional programming. In particular, Clean is suitable as an intermediate language between functional languages and (parallel) target machine architectures. A sequential implementation of Clean on a conventional machine is described and its performance is compared with other systems. The results show that Clean can be efficiently implemented.},
-       booktitle = {Functional {Programming} {Languages} and {Computer} {Architecture}},
+       abstract = {Clean is an experimental language for specifying functional computations in terms of graph rewriting. It is based on an extension of Term Rewriting Systems ({TRS}) in which the terms are replaced by graphs. Such a Graph Rewriting System ({GRS}) consists of a, possibly cyclic, directed graph, called the data graph and graph rewrite rules which specify how this data graph may be rewritten. Clean is designed to provide a firm base for functional programming. In particular, Clean is suitable as an intermediate language between functional languages and (parallel) target machine architectures. A sequential implementation of Clean on a conventional machine is described and its performance is compared with other systems. The results show that Clean can be efficiently implemented.},
+       pages = {364--384},
+       booktitle = {Functional Programming Languages and Computer Architecture},
        publisher = {Springer Berlin Heidelberg},
-       author = {Brus, T. H. and \noopsort{Eekelen}{van Eekelen}, M. C. J. D. and \noopsort{Leer}{van Leer}, M. O. and Plasmeijer, M. J.},
+       author = {Brus, T. H. and van Eekelen, M. C. J. D. and van Leer, M. O. and Plasmeijer, M. J.},
        editor = {Kahn, Gilles},
-       year = {1987},
-       pages = {364--384},
+       date = {1987},
        file = {brut87-Clean.ps.gz:/home/mrl/.local/share/zotero/storage/T2QATWIE/brut87-Clean.ps.gz:application/gzip},
 }
 
-@misc{bolingbroke_constraint_2011,
-       title = {Constraint {Kinds} for {GHC}},
+@online{bolingbroke_constraint_2011,
+       title = {Constraint Kinds for {GHC}},
        url = {http://blog.omega-prime.co.uk/2011/09/10/constraint-kinds-for-ghc/},
-       urldate = {2021-06-09},
-       journal = {:: (Bloggable a) ={\textgreater} a -{\textgreater} IO ()},
+       titleaddon = {:: (Bloggable a) ={\textgreater} a -{\textgreater} {IO} ()},
        author = {Bolingbroke, Max},
-       month = sep,
-       year = {2011},
+       urldate = {2021-06-09},
+       date = {2011-09-10},
        file = {Constraint Kinds for GHC:/home/mrl/.local/share/zotero/storage/R6RL79K7/constraint-kinds-for-ghc.html:text/html},
 }
 
 @inproceedings{fegaras_revisiting_1996,
-       address = {New York, NY, USA},
-       series = {{POPL} '96},
-       title = {Revisiting {Catamorphisms} over {Datatypes} with {Embedded} {Functions} (or, {Programs} from {Outer} {Space})},
+       location = {New York, {NY}, {USA}},
+       title = {Revisiting Catamorphisms over Datatypes with Embedded Functions (or, Programs from Outer Space)},
        isbn = {0-89791-769-3},
        doi = {10.1145/237721.237792},
+       series = {{POPL} '96},
        abstract = {We revisit the work of Paterson and of Meijer \& Hutton, which describes how to construct catamorphisms for recursive datatype definitions that embed contravariant occurrences of the type being defined. Their construction requires, for each catamorphism, the definition of an anamorphism that has an inverse-like relationship to that catamorphism. We present an alternative construction, which replaces the stringent requirement that an inverse anamorphism be defined for each catamorphism with a more lenient restriction. The resulting construction has a more efficient implementation than that of Paterson, Meijer, and Hutton and the relevant restriction can be enforced by a Hindley-Milner type inference algorithm. We provide numerous examples illustrating our method.},
-       booktitle = {Proceedings of the 23rd {ACM} {SIGPLAN}-{SIGACT} {Symposium} on {Principles} of {Programming} {Languages}},
-       publisher = {ACM},
-       author = {Fegaras, Leonidas and Sheard, Tim},
-       year = {1996},
-       note = {event-place: St. Petersburg Beach, Florida, USA},
        pages = {284--294},
+       booktitle = {Proceedings of the 23rd {ACM} {SIGPLAN}-{SIGACT} Symposium on Principles of Programming Languages},
+       publisher = {{ACM}},
+       author = {Fegaras, Leonidas and Sheard, Tim},
+       date = {1996},
+       note = {event-place: St. Petersburg Beach, Florida, {USA}},
        file = {Fegaras and Sheard - 1996 - Revisiting Catamorphisms over Datatypes with Embed.pdf:/home/mrl/.local/share/zotero/storage/WCSRVWGC/Fegaras and Sheard - 1996 - Revisiting Catamorphisms over Datatypes with Embed.pdf:application/pdf},
 }
 
 @inproceedings{pfenning_higher-order_1988,
-       address = {New York, NY, USA},
-       series = {{PLDI} '88},
-       title = {Higher-{Order} {Abstract} {Syntax}},
+       location = {New York, {NY}, {USA}},
+       title = {Higher-Order Abstract Syntax},
        isbn = {0-89791-269-1},
        doi = {10.1145/53990.54010},
+       series = {{PLDI} '88},
        abstract = {We describe motivation, design, use, and implementation of higher-order abstract syntax as a central representation for programs, formulas, rules, and other syntactic objects in program manipulation and other formal systems where matching and substitution or unification are central operations. Higher-order abstract syntax incorporates name binding information in a uniform and language generic way. Thus it acts as a powerful link integrating diverse tools in such formal environments. We have implemented higher-order abstract syntax, a supporting matching and unification algorithm, and some clients in Common Lisp in the framework of the Ergo project at Carnegie Mellon University.},
-       booktitle = {Proceedings of the {ACM} {SIGPLAN} 1988 {Conference} on {Programming} {Language} {Design} and {Implementation}},
-       publisher = {ACM},
-       author = {Pfenning, F. and Elliott, C.},
-       year = {1988},
-       note = {event-place: Atlanta, Georgia, USA},
        pages = {199--208},
+       booktitle = {Proceedings of the {ACM} {SIGPLAN} 1988 Conference on Programming Language Design and Implementation},
+       publisher = {{ACM}},
+       author = {Pfenning, F. and Elliott, C.},
+       date = {1988},
+       note = {event-place: Atlanta, Georgia, {USA}},
        file = {Pfenning and Elliott - 1988 - Higher-Order Abstract Syntax.pdf:/home/mrl/.local/share/zotero/storage/2HSRWURK/Pfenning and Elliott - 1988 - Higher-Order Abstract Syntax.pdf:application/pdf},
 }
 
 @inproceedings{chlipala_parametric_2008,
-       address = {New York, NY, USA},
-       series = {{ICFP} '08},
-       title = {Parametric {Higher}-{Order} {Abstract} {Syntax} for {Mechanized} {Semantics}},
+       location = {New York, {NY}, {USA}},
+       title = {Parametric Higher-Order Abstract Syntax for Mechanized Semantics},
        isbn = {978-1-59593-919-7},
        doi = {10.1145/1411204.1411226},
-       abstract = {We present parametric higher-order abstract syntax (PHOAS), a new approach to formalizing the syntax of programming languages in computer proof assistants based on type theory. Like higher-order abstract syntax (HOAS), PHOAS uses the meta language's binding constructs to represent the object language's binding constructs. Unlike HOAS, PHOAS types are definable in general-purpose type theories that support traditional functional programming, like Coq's Calculus of Inductive Constructions. We walk through how Coq can be used to develop certified, executable program transformations over several statically-typed functional programming languages formalized with PHOAS; that is, each transformation has a machine-checked proof of type preservation and semantic preservation. Our examples include CPS translation and closure conversion for simply-typed lambda calculus, CPS translation for System F, and translation from a language with ML-style pattern matching to a simpler language with no variable-arity binding constructs. By avoiding the syntactic hassle associated with first-order representation techniques, we achieve a very high degree of proof automation.},
-       booktitle = {Proceedings of the 13th {ACM} {SIGPLAN} {International} {Conference} on {Functional} {Programming}},
-       publisher = {ACM},
+       series = {{ICFP} '08},
+       abstract = {We present parametric higher-order abstract syntax ({PHOAS}), a new approach to formalizing the syntax of programming languages in computer proof assistants based on type theory. Like higher-order abstract syntax ({HOAS}), {PHOAS} uses the meta language's binding constructs to represent the object language's binding constructs. Unlike {HOAS}, {PHOAS} types are definable in general-purpose type theories that support traditional functional programming, like Coq's Calculus of Inductive Constructions. We walk through how Coq can be used to develop certified, executable program transformations over several statically-typed functional programming languages formalized with {PHOAS}; that is, each transformation has a machine-checked proof of type preservation and semantic preservation. Our examples include {CPS} translation and closure conversion for simply-typed lambda calculus, {CPS} translation for System F, and translation from a language with {ML}-style pattern matching to a simpler language with no variable-arity binding constructs. By avoiding the syntactic hassle associated with first-order representation techniques, we achieve a very high degree of proof automation.},
+       pages = {143--156},
+       booktitle = {Proceedings of the 13th {ACM} {SIGPLAN} International Conference on Functional Programming},
+       publisher = {{ACM}},
        author = {Chlipala, Adam},
-       year = {2008},
-       note = {event-place: Victoria, BC, Canada},
+       date = {2008},
+       note = {event-place: Victoria, {BC}, Canada},
        keywords = {compiler verification, dependent types, interactive proof assistants, type-theoretic semantics},
-       pages = {143--156},
        file = {Chlipala - 2008 - Parametric Higher-Order Abstract Syntax for Mechan.pdf:/home/mrl/.local/share/zotero/storage/DZ33DAMU/Chlipala - 2008 - Parametric Higher-Order Abstract Syntax for Mechan.pdf:application/pdf},
 }
 
 @incollection{reynolds_user-defined_1978,
-       address = {New York, NY},
-       title = {User-{Defined} {Types} and {Procedural} {Data} {Structures} as {Complementary} {Approaches} to {Data} {Abstraction}},
+       location = {New York, {NY}},
+       title = {User-Defined Types and Procedural Data Structures as Complementary Approaches to Data Abstraction},
        isbn = {978-1-4612-6315-9},
        abstract = {User-defined types (or modes) and procedural (or functional) data structures are complementary methods for data abstraction, each providing a capability lacked by the other. With user-defined types, all information about the representation of a particular kind of data is centralized in a type definition and hidden from the rest of the program. With procedural data structures, each part of the program which creates data can specify its own representation, independently of any representations used elsewhere for the same kind of data. However, this decentralization of the description of data is achieved at the cost of prohibiting primitive operations from accessing the representations of more than one data item. The contrast between these approaches is illustrated by a simple example.},
-       booktitle = {Programming {Methodology}: {A} {Collection} of {Articles} by {Members} of {IFIP} {WG2}.3},
+       pages = {309--317},
+       booktitle = {Programming Methodology: A Collection of Articles by Members of {IFIP} {WG}2.3},
        publisher = {Springer New York},
        author = {Reynolds, John C.},
        editor = {Gries, David},
-       year = {1978},
+       date = {1978},
        doi = {10.1007/978-1-4612-6315-9_22},
-       pages = {309--317},
        file = {Reynolds - 1978 - User-Defined Types and Procedural Data Structures .pdf:/home/mrl/.local/share/zotero/storage/ASXE73U2/Reynolds - 1978 - User-Defined Types and Procedural Data Structures .pdf:application/pdf},
 }
 
 @misc{ghc_team_ghc_2021,
-       title = {{GHC} {User}’s {Guide} {Documentation}},
+       title = {{GHC} User’s Guide Documentation},
        url = {https://downloads.haskell.org/~ghc/latest/docs/users_guide.pdf},
-       language = {English},
-       urldate = {2021-02-24},
        publisher = {Release},
        author = {{GHC Team}},
-       year = {2021},
+       urldate = {2021-02-24},
+       date = {2021},
        file = {GHC Team - 2021 - GHC User’s Guide Documentation.pdf:/home/mrl/.local/share/zotero/storage/87ZT5VXL/GHC Team - 2021 - GHC User’s Guide Documentation.pdf:application/pdf},
 }
 
 @misc{ghc_team_datadynamic_2021,
-       title = {Data.{Dynamic}},
+       title = {Data.Dynamic},
        url = {https://hackage.haskell.org/package/base-4.14.1.0/docs/Data-Dynamic.html},
-       language = {English},
-       urldate = {2021-02-24},
        publisher = {Release},
        author = {{GHC Team}},
-       year = {2021},
+       urldate = {2021-02-24},
+       date = {2021},
 }
 
 @inproceedings{jeuring_polytypic_1996,
-       address = {Berlin, Heidelberg},
+       location = {Berlin, Heidelberg},
        title = {Polytypic programming},
        isbn = {978-3-540-70639-7},
        abstract = {Many functions have to be written over and over again for different datatypes, either because datatypes change during the development of programs, or because functions with similar functionality are needed on different datatypes. Examples of such functions are pretty printers, debuggers, equality functions, unifiers, pattern matchers, rewriting functions, etc. Such functions are called polytypic functions. A polytypic function is a function that is defined by induction on the structure of user-defined datatypes. This paper introduces polytypic functions, and shows how to construct and reason about polytypic functions. A larger example is studied in detail: polytypic functions for term rewriting and for determining whether a collection of rewrite rules is normalising.},
-       booktitle = {Advanced {Functional} {Programming}},
+       pages = {68--114},
+       booktitle = {Advanced Functional Programming},
        publisher = {Springer Berlin Heidelberg},
        author = {Jeuring, Johan and Jansson, Patrik},
        editor = {Launchbury, John and Meijer, Erik and Sheard, Tim},
-       year = {1996},
-       pages = {68--114},
+       date = {1996},
        file = {Jeuring and Jansson - 1996 - Polytypic programming.pdf:/home/mrl/.local/share/zotero/storage/SLC4G2IT/Jeuring and Jansson - 1996 - Polytypic programming.pdf:application/pdf},
 }
 
-@book{peyton_jones_haskell_2003,
-       address = {Cambridge},
+@collection{peyton_jones_haskell_2003,
+       location = {Cambridge},
        title = {Haskell 98 language and libraries: the revised report},
        isbn = {0-521 826144},
+       pagetotal = {270},
        publisher = {Cambridge University Press},
        editor = {Peyton Jones, Simon},
-       year = {2003},
+       date = {2003},
        file = {Peyton Jones - 2003 - Haskell 98 language and libraries the revised rep.pdf:/home/mrl/.local/share/zotero/storage/UXEJT89I/Peyton Jones - 2003 - Haskell 98 language and libraries the revised rep.pdf:application/pdf},
 }
 
 @inproceedings{laufer_combining_1994,
        title = {Combining type classes and existential types},
-       booktitle = {Proceedings of the {Latin} {American} {Informatic} {Conference} ({PANEL})},
-       publisher = {ITESM-CEM},
-       author = {L\"{a}ufer, Konstantin},
-       year = {1994},
+       eventtitle = {Latin American Informatics Conferenc},
+       booktitle = {Proceedings of the Latin American Informatic Conference ({PANEL})},
+       publisher = {{ITESM}-{CEM}},
+       author = {Läufer, Konstantin},
+       date = {1994},
        note = {event-place: Monterrey, Mexico},
+       file = {Läufer - COMBINING TYPE CLASSES AND EXISTENTIAL TYPES.pdf:/home/mrl/.local/share/zotero/storage/KR4P9EHS/Läufer - COMBINING TYPE CLASSES AND EXISTENTIAL TYPES.pdf:application/pdf},
 }
 
-@techreport{hughes_restricted_1999,
-       address = {Paris},
-       title = {Restricted data types in {Haskell}},
-       number = {UU-CS-1999-28},
+@report{hughes_restricted_1999,
+       location = {Paris},
+       title = {Restricted data types in Haskell},
+       pages = {16},
+       number = {{UU}-{CS}-1999-28},
        institution = {Department of Information and Computing Sciences, Utrecht University},
        author = {Hughes, John},
-       year = {1999},
-       pages = {16},
+       date = {1999},
        file = {Hughes - 1999 - Restricted data types in Haskell.pdf:/home/mrl/.local/share/zotero/storage/7ZE2MYWE/Hughes - 1999 - Restricted data types in Haskell.pdf:application/pdf},
 }
 
 @article{najd_trees_2017,
-       title = {Trees that {Grow}},
+       title = {Trees that Grow},
        volume = {23},
-       abstract = {We study the notion of extensibility in functional data types, as a new approach to the problem of decorating abstract syntax trees with additional information. We observed the need for such extensibility while redesigning the data types representing Haskell abstract syntax inside Glasgow Haskell Compiler (GHC). Specifically, we describe a programming idiom that exploits type-level functions to allow a particular form of extensibility. The approach scales to support existentials and generalised algebraic data types, and we can use pattern synonyms to make it convenient in practice.},
+       abstract = {We study the notion of extensibility in functional data types, as a new approach to the problem of decorating abstract syntax trees with additional information. We observed the need for such extensibility while redesigning the data types representing Haskell abstract syntax inside Glasgow Haskell Compiler ({GHC}). Specifically, we describe a programming idiom that exploits type-level functions to allow a particular form of extensibility. The approach scales to support existentials and generalised algebraic data types, and we can use pattern synonyms to make it convenient in practice.},
+       pages = {42--62},
        number = {1},
-       journal = {Journal of Universal Computer Science},
+       journaltitle = {Journal of Universal Computer Science},
        author = {Najd, Shayan and Peyton Jones, Simon},
-       month = jan,
-       year = {2017},
-       pages = {42--62},
+       date = {2017-01-28},
        file = {Najd and Jones - 2017 - Trees that Grow.pdf:/home/mrl/.local/share/zotero/storage/HYQFTWZP/Najd and Jones - 2017 - Trees that Grow.pdf:application/pdf},
 }
 
 @inproceedings{loh_open_2006,
-       address = {New York, NY, USA},
-       series = {{PPDP} '06},
-       title = {Open {Data} {Types} and {Open} {Functions}},
+       location = {New York, {NY}, {USA}},
+       title = {Open Data Types and Open Functions},
        isbn = {1-59593-388-3},
        doi = {10.1145/1140335.1140352},
+       series = {{PPDP} '06},
        abstract = {The problem of supporting the modular extensibility of both data and functions in one programming language at the same time is known as the expression problem. Functional languages traditionally make it easy to add new functions, but extending data (adding new data constructors) requires modifying existing code. We present a semantically and syntactically lightweight variant of open data types and open functions as a solution to the expression problem in the Haskell language. Constructors of open data types and equations of open functions may appear scattered throughout a program with several modules. The intended semantics is as follows: the program should behave as if the data types and functions were closed, defined in one place. The order of function equations is determined by best-fit pattern matching, where a specific pattern takes precedence over an unspecific one. We show that our solution is applicable to the expression problem, generic programming, and exceptions. We sketch two implementations: a direct implementation of the semantics, and a scheme based on mutually recursive modules that permits separate compilation},
-       booktitle = {Proceedings of the 8th {ACM} {SIGPLAN} {International} {Conference} on {Principles} and {Practice} of {Declarative} {Programming}},
-       publisher = {ACM},
-       author = {L\"{o}h, Andres and Hinze, Ralf},
-       year = {2006},
-       note = {event-place: Venice, Italy},
-       keywords = {expression problem, extensible data types, extensible exceptions, extensible functions, functional programming, generic programming, Haskell, mutually recursive modules},
        pages = {133--144},
+       booktitle = {Proceedings of the 8th {ACM} {SIGPLAN} International Conference on Principles and Practice of Declarative Programming},
+       publisher = {{ACM}},
+       author = {Löh, Andres and Hinze, Ralf},
+       date = {2006},
+       note = {event-place: Venice, Italy},
+       keywords = {functional programming, Haskell, expression problem, extensible data types, extensible exceptions, extensible functions, generic programming, mutually recursive modules},
        file = {OpenDatatypes.pdf:/home/mrl/.local/share/zotero/storage/NEP9GZ9N/OpenDatatypes.pdf:application/pdf},
 }
 
 @inproceedings{hutton_fold_1998,
-       address = {New York, NY, USA},
-       series = {{ICFP} '98},
-       title = {Fold and {Unfold} for {Program} {Semantics}},
+       location = {New York, {NY}, {USA}},
+       title = {Fold and Unfold for Program Semantics},
        isbn = {1-58113-024-4},
        doi = {10.1145/289423.289457},
-       abstract = {In this paper we explain how recursion operators can be used to structure and reason about program semantics within a functional language. In particular, we show how the recursion operator fold can be used to structure denotational semantics, how the dual recursion operator unfold can be used to structure operational semantics, and how algebraic properties of these operators can be used to reason about program semantics. The techniques are explained with the aid of two main examples, the first concerning arithmetic expressions, and the second concerning Milner's concurrent language CCS. The aim of the paper is to give functional programmers new insights into recursion operators, program semantics, and the relationships between them.},
-       booktitle = {Proceedings of the {Third} {ACM} {SIGPLAN} {International} {Conference} on {Functional} {Programming}},
-       publisher = {ACM},
-       author = {Hutton, Graham},
-       year = {1998},
-       note = {event-place: Baltimore, Maryland, USA},
+       series = {{ICFP} '98},
+       abstract = {In this paper we explain how recursion operators can be used to structure and reason about program semantics within a functional language. In particular, we show how the recursion operator fold can be used to structure denotational semantics, how the dual recursion operator unfold can be used to structure operational semantics, and how algebraic properties of these operators can be used to reason about program semantics. The techniques are explained with the aid of two main examples, the first concerning arithmetic expressions, and the second concerning Milner's concurrent language {CCS}. The aim of the paper is to give functional programmers new insights into recursion operators, program semantics, and the relationships between them.},
        pages = {280--288},
+       booktitle = {Proceedings of the Third {ACM} {SIGPLAN} International Conference on Functional Programming},
+       publisher = {{ACM}},
+       author = {Hutton, Graham},
+       date = {1998},
+       note = {event-place: Baltimore, Maryland, {USA}},
        file = {Hutton - 1998 - Fold and unfold for program semantics.pdf:/home/mrl/.local/share/zotero/storage/YEB9K2TP/Hutton - 1998 - Fold and unfold for program semantics.pdf:application/pdf},
 }
 
 @article{abadi_dynamic_1991,
-       title = {Dynamic {Typing} in a {Statically} {Typed} {Language}},
+       title = {Dynamic Typing in a Statically Typed Language},
        volume = {13},
        issn = {0164-0925},
        doi = {10.1145/103135.103138},
        abstract = {Statically typed programming languages allow earlier error checking, better enforcement of diciplined programming styles, and the generation of more efficient object code than languages where all type consistency checks are performed at run time. However, even in statically typed languages, there is often the need to deal with datawhose type cannot be determined at compile time. To handle such situations safely, we propose to add a type Dynamic whose values are pairs of a value v and a type tag T where v has the type denoted by T. Instances of Dynamic are built with an explicit tagging construct and inspected with a type safe typecase construct.This paper explores the syntax, operational semantics, and denotational semantics of a simple language that includes the type Dynamic. We give examples of how dynamically typed values can be used in programming. Then we discuss an operational semantics for our language and obtain a soundness theorem. We present two formulations of the denotational semantics of this language and relate them to the operational semantics. Finally, we consider the implications of polymorphism and some implementation issues.},
+       pages = {237--268},
        number = {2},
-       journal = {ACM Trans. Program. Lang. Syst.},
+       journaltitle = {{ACM} Trans. Program. Lang. Syst.},
        author = {Abadi, Martín and Cardelli, Luca and Pierce, Benjamin and Plotkin, Gordon},
-       month = apr,
-       year = {1991},
-       note = {Place: New York, NY, USA
-Publisher: ACM},
+       date = {1991-04},
+       note = {Place: New York, {NY}, {USA}
+Publisher: {ACM}},
        keywords = {theory},
-       pages = {237--268},
        file = {Abadi et al. - 1991 - Dynamic typing in a statically typed language.pdf:/home/mrl/.local/share/zotero/storage/CJSBG6X7/Abadi et al. - 1991 - Dynamic typing in a statically typed language.pdf:application/pdf},
 }
 
 @inproceedings{svenningsson_combining_2013,
-       address = {Berlin, Heidelberg},
-       title = {Combining {Deep} and {Shallow} {Embedding} for {EDSL}},
+       location = {Berlin, Heidelberg},
+       title = {Combining Deep and Shallow Embedding for {EDSL}},
        isbn = {978-3-642-40447-4},
        doi = {10.1007/978-3-642-40447-4_2},
        abstract = {When compiling embedded languages it is natural to use an abstract syntax tree to represent programs. This is known as a deep embedding and it is a rather cumbersome technique compared to other forms of embedding, typically leading to more code and being harder to extend. In shallow embeddings, language constructs are mapped directly to their semantics which yields more flexible and succinct implementations. But shallow embeddings are not well-suited for compiling embedded languages. We present a technique to combine deep and shallow embedding in the context of compiling embedded languages in order to provide the benefits of both techniques. In particular it helps keeping the deep embedding small and it makes extending the embedded language much easier. Our technique also has some unexpected but welcome knock-on effects. It provides fusion of functions to remove intermediate results for free without any additional effort. It also helps to give the embedded language a more natural programming interface.},
-       booktitle = {Trends in {Functional} {Programming}},
+       pages = {21--36},
+       booktitle = {Trends in Functional Programming},
        publisher = {Springer Berlin Heidelberg},
        author = {Svenningsson, Josef and Axelsson, Emil},
        editor = {Loidl, Hans-Wolfgang and Peña, Ricardo},
-       year = {2013},
-       pages = {21--36},
+       date = {2013},
        file = {svenningsson2013combining.pdf:/home/mrl/.local/share/zotero/storage/NFBGZCZT/svenningsson2013combining.pdf:application/pdf},
 }
 
 @inproceedings{yorgey_giving_2012,
-       address = {New York, NY, USA},
-       series = {{TLDI} '12},
-       title = {Giving {Haskell} a {Promotion}},
+       location = {New York, {NY}, {USA}},
+       title = {Giving Haskell a Promotion},
        isbn = {978-1-4503-1120-5},
        doi = {10.1145/2103786.2103795},
+       series = {{TLDI} '12},
        abstract = {Static type systems strive to be richly expressive while still being simple enough for programmers to use. We describe an experiment that enriches Haskell's kind system with two features promoted from its type system: data types and polymorphism. The new system has a very good power-to-weight ratio: it offers a significant improvement in expressiveness, but, by re-using concepts that programmers are already familiar with, the system is easy to understand and implement.},
-       booktitle = {Proceedings of the 8th {ACM} {SIGPLAN} {Workshop} on {Types} in {Language} {Design} and {Implementation}},
-       publisher = {ACM},
-       author = {Yorgey, Brent A. and Weirich, Stephanie and Cretin, Julien and Peyton Jones, Simon and Vytiniotis, Dimitrios and Magalh\~{a}es, Jos\'{e} Pedro},
-       year = {2012},
-       note = {event-place: Philadelphia, Pennsylvania, USA},
-       keywords = {haskell, kinds, polymorphism, promotion},
        pages = {53--66},
+       booktitle = {Proceedings of the 8th {ACM} {SIGPLAN} Workshop on Types in Language Design and Implementation},
+       publisher = {{ACM}},
+       author = {Yorgey, Brent A. and Weirich, Stephanie and Cretin, Julien and Peyton Jones, Simon and Vytiniotis, Dimitrios and Magalhães, José Pedro},
+       date = {2012},
+       note = {event-place: Philadelphia, Pennsylvania, {USA}},
+       keywords = {haskell, kinds, polymorphism, promotion},
        file = {Yorgey et al. - 2012 - Giving Haskell a Promotion.pdf:/home/mrl/.local/share/zotero/storage/7GTDGQ3I/Yorgey et al. - 2012 - Giving Haskell a Promotion.pdf:application/pdf},
 }
 
 @inproceedings{atkey_unembedding_2009,
-       address = {New York, NY, USA},
-       series = {Haskell '09},
-       title = {Unembedding {Domain}-{Specific} {Languages}},
+       location = {New York, {NY}, {USA}},
+       title = {Unembedding Domain-Specific Languages},
        isbn = {978-1-60558-508-6},
        doi = {10.1145/1596638.1596644},
+       series = {Haskell '09},
        abstract = {Higher-order abstract syntax provides a convenient way of embedding domain-specific languages, but is awkward to analyse and manipulate directly. We explore the boundaries of higher-order abstract syntax. Our key tool is the unembedding of embedded terms as de Bruijn terms, enabling intensional analysis. As part of our solution we present techniques for separating the definition of an embedded program from its interpretation, giving modular extensions of the embedded language, and different ways to encode the types of the embedded language.},
-       booktitle = {Proceedings of the 2nd {ACM} {SIGPLAN} {Symposium} on {Haskell}},
-       publisher = {ACM},
+       pages = {37--48},
+       booktitle = {Proceedings of the 2nd {ACM} {SIGPLAN} Symposium on Haskell},
+       publisher = {{ACM}},
        author = {Atkey, Robert and Lindley, Sam and Yallop, Jeremy},
-       year = {2009},
+       date = {2009},
        note = {event-place: Edinburgh, Scotland},
        keywords = {domain-specific languages, higher-order abstract syntax, type classes, unembedding},
-       pages = {37--48},
        file = {Atkey et al. - 2009 - Unembedding Domain-Specific Languages.pdf:/home/mrl/.local/share/zotero/storage/GVFRIDUG/Atkey et al. - 2009 - Unembedding Domain-Specific Languages.pdf:application/pdf},
 }
 
 @inproceedings{krishnamurthi_synthesizing_1998,
-       address = {Berlin, Heidelberg},
+       location = {Berlin, Heidelberg},
        title = {Synthesizing object-oriented and functional design to promote re-use},
        isbn = {978-3-540-69064-1},
        abstract = {Many problems require recursively specified types of data and a collection of tools that operate on those data. Over time, these problems evolve so that the programmer must extend the toolkit or extend the types and adjust the existing tools accordingly. Ideally, this should be done without modifying existing code. Unfortunately, the prevailing program design strategies do not support both forms of extensibility: functional programming accommodates the addition of tools, while object-oriented programming supports either adding new tools or extending the data set, but not both. In this paper, we present a composite design pattern that synthesizes the best of both approaches and in the process resolves the tension between the two design strategies. We also show how this protocol suggests a new set of linguistic facilities for languages that support class systems.},
-       booktitle = {{ECOOP}'98 — {Object}-{Oriented} {Programming}},
+       pages = {91--113},
+       booktitle = {{ECOOP}'98 — Object-Oriented Programming},
        publisher = {Springer Berlin Heidelberg},
        author = {Krishnamurthi, Shriram and Felleisen, Matthias and Friedman, Daniel P.},
        editor = {Jul, Eric},
-       year = {1998},
+       date = {1998},
        note = {event-place: Brussels, Belgium},
-       pages = {91--113},
        file = {Krishnamurthi et al. - 1998 - Synthesizing object-oriented and functional design.pdf:/home/mrl/.local/share/zotero/storage/AMMULPPT/Krishnamurthi et al. - 1998 - Synthesizing object-oriented and functional design.pdf:application/pdf},
 }
 
 @incollection{gibbons_functional_2015,
-       address = {Cham},
-       title = {Functional {Programming} for {Domain}-{Specific} {Languages}},
+       location = {Cham},
+       title = {Functional Programming for Domain-Specific Languages},
        isbn = {978-3-319-15940-9},
        abstract = {Domain-specific languages are a popular application area for functional programming; and conversely, functional programming is a popular implementation vehicle for domain-specific languages—at least, for embedded ones. Why is this? The appeal of embedded domain-specific languages is greatly enhanced by the presence of convenient lightweight tools for defining, implementing, and optimising new languages; such tools represent one of functional programming's strengths. In these lectures we discuss functional programming techniques for embedded domain-specific languages; we focus especially on algebraic datatypes and higher-order functions, and their influence on deep and shallow embeddings.},
-       booktitle = {Central {European} {Functional} {Programming} {School}: 5th {Summer} {School}, {CEFP} 2013, {Cluj}-{Napoca}, {Romania}, {July} 8-20, 2013, {Revised} {Selected} {Papers}},
+       pages = {1--28},
+       booktitle = {Central European Functional Programming School: 5th Summer School, {CEFP} 2013, Cluj-Napoca, Romania, July 8-20, 2013, Revised Selected Papers},
        publisher = {Springer International Publishing},
        author = {Gibbons, Jeremy},
-       editor = {Zs\'{o}k, Vikt\'{o}ria and Horv\'{a}th, Zolt\'{a}n and Csat\'{o}, Lehel},
-       year = {2015},
+       editor = {Zsók, Viktória and Horváth, Zoltán and Csató, Lehel},
+       date = {2015},
        doi = {10.1007/978-3-319-15940-9_1},
-       pages = {1--28},
        file = {Gibbons - 2015 - Functional Programming for Domain-Specific Languag.pdf:/home/mrl/.local/share/zotero/storage/ARUBLFU6/Gibbons - 2015 - Functional Programming for Domain-Specific Languag.pdf:application/pdf},
 }
 
-@mastersthesis{van_der_veen_mutable_2020,
-       address = {Nijmegen},
-       title = {Mutable {Collection} {Types} in {Shallow} {Embedded} {DSLs}},
-       language = {en},
-       school = {Radboud University},
+@thesis{van_der_veen_mutable_2020,
+       location = {Nijmegen},
+       title = {Mutable Collection Types in Shallow Embedded {DSLs}},
+       pagetotal = {68},
+       institution = {Radboud University},
+       type = {Master's Thesis},
        author = {van der Veen, Erin},
-       month = jun,
-       year = {2020},
+       date = {2020-06-17},
+       langid = {english},
        file = {thesis_final.pdf:/home/mrl/.local/share/zotero/storage/Y9QWGGB9/thesis_final.pdf:application/pdf},
 }
 
-@phdthesis{de_boer_secure_2020,
-       address = {Nijmegen},
-       type = {Bachelor's {Thesis}},
-       title = {Secure {Communication} {Channels} for the {mTask} {System}.},
-       language = {en},
-       school = {Radboud University},
+@thesis{de_boer_secure_2020,
+       location = {Nijmegen},
+       title = {Secure Communication Channels for the {mTask} System.},
+       pagetotal = {39},
+       institution = {Radboud University},
+       type = {Bachelor's Thesis},
        author = {de Boer, Michel},
-       month = jun,
-       year = {2020},
+       date = {2020-06},
+       langid = {english},
        file = {Boer, de - 2020 - Secure Communication Channels for the mTask System.pdf:/home/mrl/.local/share/zotero/storage/C46E3FBF/Boer, de - 2020 - Secure Communication Channels for the mTask System.pdf:application/pdf},
 }
 
-@phdthesis{vos_draadloze_2020,
-       address = {Den Helder},
-       type = {Bachelor's {Thesis}},
-       title = {Draadloze prestaties van de {Wemos} {D1} {Mini} {V3}},
-       language = {nl},
-       school = {Netherlandse Defensie Academie},
+@thesis{vos_draadloze_2020,
+       location = {Den Helder},
+       title = {Draadloze prestaties van de Wemos D1 Mini V3},
+       institution = {Netherlandse Defensie Academie},
+       type = {Bachelor's Thesis},
        author = {Vos, W.F.T.},
-       year = {2020},
+       date = {2020},
+       langid = {dutch},
        file = {Draadloze prestaties van de Wemos D1 Mini V3.pdf:/home/mrl/.local/share/zotero/storage/PMN5F2E7/Draadloze prestaties van de Wemos D1 Mini V3.pdf:application/pdf},
 }
 
 @inproceedings{barendregt_towards_1987,
        title = {Towards an intermediate language for graph rewriting},
        volume = {1},
-       booktitle = {{PARLE}, {Parallel} {Architectures} and {Languages} {Europe}},
-       publisher = {Springer Verlag},
-       author = {Barendregt, H.P. and \noopsort{Eekelen}{van Eekelen}, M.C.J.D and Glauert, J.R.W. and Kennaway, J.R. and Plasmeijer, M.J. and Sleep, M.R.},
-       year = {1987},
        pages = {159--174},
+       booktitle = {{PARLE}, Parallel Architectures and Languages Europe},
+       publisher = {Springer Verlag},
+       author = {Barendregt, {HP} and van Eekelen, {MCJD} and Glauert, {JRW} and Kennaway, {JR} and Plasmeijer, {MJ} and Sleep, {MR}},
+       date = {1987},
        file = {barh87-Lean.ps.gz:/home/mrl/.local/share/zotero/storage/63FBHND7/barh87-Lean.ps.gz:application/gzip;barh87-Lean.ps.gz:/home/mrl/.local/share/zotero/storage/6H2UKQGZ/barh87-Lean.ps.gz:application/gzip},
 }
 
-@misc{johnson-davies_lisp_2020,
+@online{johnson-davies_lisp_2020,
        title = {Lisp for microcontrollers},
        url = {https://ulisp.com},
-       urldate = {2020-02-14},
-       journal = {Lisp for microcontrollers},
+       titleaddon = {Lisp for microcontrollers},
        author = {Johnson-Davies, David},
-       year = {2020},
+       urldate = {2020-02-14},
+       date = {2020},
 }
 
 @incollection{wang_maintaining_2018,
-       address = {Cham},
-       title = {Maintaining {Separation} of {Concerns} {Through} {Task} {Oriented} {Software} {Development}},
+       location = {Cham},
+       title = {Maintaining Separation of Concerns Through Task Oriented Software Development},
        volume = {10788},
-       isbn = {978-3-319-89718-9 978-3-319-89719-6},
+       isbn = {978-3-319-89718-9},
        abstract = {Task Oriented Programming is a programming paradigm that enhances ‘classic’ functional programming with means to express the coordination of work among people and computer systems, the distribution and control of data sources, and the human-machine interfaces. To make the creation process of such applications feasible, it is important to have separation of concerns. In this paper we demonstrate how this is achieved within the Task Oriented Software Development process and illustrate the approach by means of a case study.},
-       language = {en},
-       urldate = {2019-01-14},
-       booktitle = {Trends in {Functional} {Programming}},
+       pages = {19--38},
+       booktitle = {Trends in Functional Programming},
        publisher = {Springer International Publishing},
        author = {Stutterheim, Jurriën and Achten, Peter and Plasmeijer, Rinus},
        editor = {Wang, Meng and Owens, Scott},
-       year = {2018},
+       urldate = {2019-01-14},
+       date = {2018},
+       langid = {english},
        doi = {10.1007/978-3-319-89719-6},
-       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},
 }
 
-@phdthesis{serrano_type_2018,
-       type = {{PhD} {Thesis}},
-       title = {Type {Error} {Customization} for {Embedded} {Domain}-{Specific} {Languages}},
-       school = {Utrecht University},
+@thesis{serrano_type_2018,
+       title = {Type Error Customization for Embedded Domain-Specific Languages},
+       institution = {Utrecht University},
+       type = {phdthesis},
        author = {Serrano, Alejandro},
-       year = {2018},
+       date = {2018},
 }
 
 @inproceedings{steiner_firmata:_2009,
-       title = {Firmata: {Towards} {Making} {Microcontrollers} {Act} {Like} {Extensions} of the {Computer}.},
+       title = {Firmata: Towards Making Microcontrollers Act Like Extensions of the Computer.},
+       pages = {125--130},
        booktitle = {{NIME}},
        author = {Steiner, Hans-Christoph},
-       year = {2009},
-       pages = {125--130},
+       date = {2009},
        file = {Steiner - Firmata Towards Making Microcontrollers Act Like .pdf:/home/mrl/.local/share/zotero/storage/YXMY5XHP/Steiner - Firmata Towards Making Microcontrollers Act Like .pdf:application/pdf},
 }
 
 @article{sugihara_programming_2008,
-       title = {Programming models for sensor networks: {A} survey},
+       title = {Programming models for sensor networks: A survey},
        volume = {4},
        issn = {15504859},
-       shorttitle = {Programming models for sensor networks},
        url = {http://portal.acm.org/citation.cfm?doid=1340771.1340774},
        doi = {10.1145/1340771.1340774},
-       language = {en},
+       shorttitle = {Programming models for sensor networks},
+       pages = {1--29},
        number = {2},
-       urldate = {2019-11-01},
-       journal = {ACM Transactions on Sensor Networks},
+       journaltitle = {{ACM} Transactions on Sensor Networks},
+       shortjournal = {{ACM} Trans. Sen. Netw.},
        author = {Sugihara, Ryo and Gupta, Rajesh K.},
-       month = mar,
-       year = {2008},
-       pages = {1--29},
+       urldate = {2019-11-01},
+       date = {2008-03-01},
+       langid = {english},
        file = {Sugihara and Gupta - 2008 - Programming models for sensor networks A survey.pdf:/home/mrl/.local/share/zotero/storage/PQWX7QFD/Sugihara and Gupta - 2008 - Programming models for sensor networks A survey.pdf:application/pdf;Sugihara and Gupta - 2008 - Programming models for sensor networks A survey.pdf:/home/mrl/.local/share/zotero/storage/DP7V3EV8/Sugihara and Gupta - 2008 - Programming models for sensor networks A survey.pdf:application/pdf},
 }
 
 @article{dube_bit:_2000,
-       title = {{BIT}: {A} very compact {Scheme} system for embedded applications},
-       journal = {Proceedings of the Fourth Workshop on Scheme and Functional Programming},
-       author = {Dub\'{e}, Danny},
-       year = {2000},
+       title = {{BIT}: A very compact Scheme system for embedded applications},
+       journaltitle = {Proceedings of the Fourth Workshop on Scheme and Functional Programming},
+       author = {Dubé, Danny},
+       date = {2000},
        file = {dube.ps:/home/mrl/.local/share/zotero/storage/RNG6V7HT/dube.ps:application/postscript},
 }
 
 @inproceedings{feeley_picbit:_2003,
-       title = {{PICBIT}: {A} {Scheme} system for the {PIC} microcontroller},
-       booktitle = {Proceedings of the {Fourth} {Workshop} on {Scheme} and {Functional} {Programming}},
-       publisher = {Citeseer},
-       author = {Feeley, Marc and Dub\'{e}, Danny},
-       year = {2003},
+       title = {{PICBIT}: A Scheme system for the {PIC} microcontroller},
        pages = {7--15},
+       booktitle = {Proceedings of the Fourth Workshop on Scheme and Functional Programming},
+       publisher = {Citeseer},
+       author = {Feeley, Marc and Dubé, Danny},
+       date = {2003},
+       file = {Feeley and Dubé - 2003 - PICBIT A Scheme system for the PIC microcontrolle.pdf:/home/mrl/.local/share/zotero/storage/EAEJSKNR/Feeley and Dubé - 2003 - PICBIT A Scheme system for the PIC microcontrolle.pdf:application/pdf},
 }
 
 @inproceedings{st-amour_picobit:_2009,
        title = {{PICOBIT}: a compact scheme system for microcontrollers},
-       booktitle = {International {Symposium} on {Implementation} and {Application} of {Functional} {Languages}},
+       pages = {1--17},
+       booktitle = {International Symposium on Implementation and Application of Functional Languages},
        publisher = {Springer},
        author = {St-Amour, Vincent and Feeley, Marc},
-       year = {2009},
-       pages = {1--17},
+       date = {2009},
        file = {St-Amour and Feeley - 2009 - PICOBIT a compact scheme system for microcontroll.pdf:/home/mrl/.local/share/zotero/storage/KXRIEPJZ/St-Amour and Feeley - 2009 - PICOBIT a compact scheme system for microcontroll.pdf:application/pdf},
 }
 
 @article{barendsen_uniqueness_1996,
        title = {Uniqueness typing for functional languages with graph rewriting semantics},
        volume = {6},
+       pages = {579--612},
        number = {6},
-       journal = {Mathematical structures in computer science},
+       journaltitle = {Mathematical structures in computer science},
        author = {Barendsen, Erik and Smetsers, Sjaak},
-       year = {1996},
-       pages = {579--612},
+       date = {1996},
        file = {Barendsen and Smetsers - 1996 - Uniqueness typing for functional languages with gr.pdf:/home/mrl/.local/share/zotero/storage/BPRC6KJK/Barendsen and Smetsers - 1996 - Uniqueness typing for functional languages with gr.pdf:application/pdf},
 }
 
 @incollection{bolderheij_mission-driven_2018,
-       title = {A {Mission}-{Driven} {C2} {Framework} for {Enabling} {Heterogeneous} {Collaboration}},
-       booktitle = {{NL} {ARMS} {Netherlands} {Annual} {Review} of {Military} {Studies} 2018},
-       publisher = {Springer},
-       author = {Bolderheij, F and Jansen, JM and Kool, AA and Stutterheim, J},
-       year = {2018},
+       title = {A Mission-Driven C2 Framework for Enabling Heterogeneous Collaboration},
        pages = {107--130},
+       booktitle = {{NL} {ARMS} Netherlands Annual Review of Military Studies 2018},
+       publisher = {Springer},
+       author = {Bolderheij, F and Jansen, {JM} and Kool, {AA} and Stutterheim, J},
+       date = {2018},
        file = {Bolderheij et al. - 2018 - A Mission-Driven C2 Framework for Enabling Heterog.pdf:/home/mrl/.local/share/zotero/storage/CHDHW2TU/Bolderheij et al. - 2018 - A Mission-Driven C2 Framework for Enabling Heterog.pdf:application/pdf},
 }
 
 @inproceedings{lijnse_itasks_2009,
-       title = {{iTasks} 2: {iTasks} for {End}-users},
-       booktitle = {International {Symposium} on {Implementation} and {Application} of {Functional} {Languages}},
+       title = {{iTasks} 2: {iTasks} for End-users},
+       pages = {36--54},
+       booktitle = {International Symposium on Implementation and Application of Functional Languages},
        publisher = {Springer},
        author = {Lijnse, Bas and Plasmeijer, Rinus},
-       year = {2009},
-       pages = {36--54},
+       date = {2009},
        file = {Lijnse and Plasmeijer - 2009 - iTasks 2 iTasks for End-users.pdf:/home/mrl/.local/share/zotero/storage/KACEWKXY/Lijnse and Plasmeijer - 2009 - iTasks 2 iTasks for End-users.pdf:application/pdf},
 }
 
 @inproceedings{plasmeijer_conference_2006,
        title = {A conference management system based on the {iData} toolkit},
-       booktitle = {Symposium on {Implementation} and {Application} of {Functional} {Languages}},
+       pages = {108--125},
+       booktitle = {Symposium on Implementation and Application of Functional Languages},
        publisher = {Springer},
        author = {Plasmeijer, Rinus and Achten, Peter},
-       year = {2006},
-       pages = {108--125},
+       date = {2006},
        file = {Plasmeijer and Achten - 2006 - A conference management system based on the iData .pdf:/home/mrl/.local/share/zotero/storage/D4ZXJJ22/Plasmeijer and Achten - 2006 - A conference management system based on the iData .pdf:application/pdf},
 }
 
 @inproceedings{jansen_towards_2010,
-       address = {Seattle, USA},
+       location = {Seattle, {USA}},
        title = {Towards dynamic workflows for crisis management},
        isbn = {978-972-49-2247-8},
-       booktitle = {7th {Proceedings} of the {International} {Conference} on {Information} {Systems} for {Crisis} {Response} and {Management}, {Seattle}, {WA}, {USA}, {May}, 2010.},
-       publisher = {Information Systems for Crisis Response and Management, ISCRAM},
+       eventtitle = {7th International {ISCRAM} Conference on Information Systems for Crisis Response and Management},
+       booktitle = {7th Proceedings of the International Conference on Information Systems for Crisis Response and Management, Seattle, {WA}, {USA}, May, 2010.},
+       publisher = {Information Systems for Crisis Response and Management, {ISCRAM}},
        author = {Jansen, Jan Martin and Lijnse, Bas and Plasmeijer, Rinus},
        editor = {French, Simon and Tomaszewski, n and Zobel, Christopher},
-       year = {2010},
+       date = {2010},
        file = {Jansen et al. - 2010 - Towards dynamic workflows for crisis management.pdf:/home/mrl/.local/share/zotero/storage/AQSZJ3TA/Jansen et al. - 2010 - Towards dynamic workflows for crisis management.pdf:application/pdf},
 }
 
 @inproceedings{van_der_heijden_managing_2011,
        title = {Managing {COPD} exacerbations with telemedicine},
-       booktitle = {Conference on {Artificial} {Intelligence} in {Medicine} in {Europe}},
-       publisher = {Springer},
-       author = {van der Heijden, Maarten and Lijnse, Bas and Lucas, Peter JF and Heijdra, Yvonne F and Schermer, Tjard RJ},
-       year = {2011},
        pages = {169--178},
+       booktitle = {Conference on Artificial Intelligence in Medicine in Europe},
+       publisher = {Springer},
+       author = {van der Heijden, Maarten and Lijnse, Bas and Lucas, Peter {JF} and Heijdra, Yvonne F and Schermer, Tjard {RJ}},
+       date = {2011},
        file = {Van Der Heijden et al. - 2011 - Managing COPD exacerbations with telemedicine.pdf:/home/mrl/.local/share/zotero/storage/AS3MPSEF/Van Der Heijden et al. - 2011 - Managing COPD exacerbations with telemedicine.pdf:application/pdf},
 }
 
 @inproceedings{lijnse_incidone:_2012,
-       title = {Incidone: {A} task-oriented incident coordination tool},
+       title = {Incidone: A task-oriented incident coordination tool},
        volume = {12},
-       booktitle = {Proceedings of the 9th {International} {Conference} on {Information} {Systems} for {Crisis} {Response} and {Management}, {ISCRAM}},
+       booktitle = {Proceedings of the 9th International Conference on Information Systems for Crisis Response and Management, {ISCRAM}},
        author = {Lijnse, Bas and Jansen, Jan Martin and Plasmeijer, Rinus and {others}},
-       year = {2012},
+       date = {2012},
        file = {Lijnse et al. - 2012 - Incidone A task-oriented incident coordination to.pdf:/home/mrl/.local/share/zotero/storage/EYS9U69B/Lijnse et al. - 2012 - Incidone A task-oriented incident coordination to.pdf:application/pdf},
 }
 
 @inproceedings{santanna_safe_2013,
        title = {Safe system-level concurrency on resource-constrained nodes},
-       booktitle = {Proceedings of the 11th {ACM} {Conference} on {Embedded} {Networked} {Sensor} {Systems}},
-       publisher = {ACM},
-       author = {Sant'Anna, Francisco and Rodriguez, Noemi and Ierusalimschy, Roberto and Landsiedel, Olaf and Tsigas, Philippas},
-       year = {2013},
        pages = {11},
+       booktitle = {Proceedings of the 11th {ACM} Conference on Embedded Networked Sensor Systems},
+       publisher = {{ACM}},
+       author = {Sant'Anna, Francisco and Rodriguez, Noemi and Ierusalimschy, Roberto and Landsiedel, Olaf and Tsigas, Philippas},
+       date = {2013},
        file = {Sant'Anna et al. - 2013 - Safe system-level concurrency on resource-constrai.pdf:/home/mrl/.local/share/zotero/storage/4865FAU3/Sant'Anna et al. - 2013 - Safe system-level concurrency on resource-constrai.pdf:application/pdf},
 }
 
-@mastersthesis{bohm_asynchronous_2019,
-       address = {Nijmegen},
-       title = {Asynchronous {Actions} in a {Synchronous} {World}},
-       abstract = {This thesis introduces a system for asynchronous communication in the iTasks framework. The
+@thesis{bohm_asynchronous_2019,
+       location = {Nijmegen},
+       title = {Asynchronous Actions in a Synchronous World},
+       abstract = {This thesis introduces a system for asynchronous communication in the {iTasks} framework. The
 framework is written in Clean, a pure, lazy, functional language. Tasks need to be able to access
 data in the system and retrieve data from all kinds of data sources. The share system allows
 tasks to read arbitrary data sources and provides a simple interface that allows composition of
@@ -563,52 +566,53 @@ different data sources. This system allows tasks to share and store data in an e
 way.
 A disadvantage of the share system is that it does not allow asynchronous evaluation. When
 one task is using a share, other tasks have to wait for the full evaluation of this share before they
-can be evaluated. This has the effect that users in the iTasks framework must wait on other
+can be evaluated. This has the effect that users in the {iTasks} framework must wait on other
 users. This results in poor user experience.
 We implement a share system which, by way of share rewriting, allows asynchronous evalua-
 tion. The system can be used to communicate with arbitrary services on the internet, as well as
-to communicate between different iTasks servers in a distributed context.
+to communicate between different {iTasks} servers in a distributed context.
 We show how asynchronous shares are implemented and what the limitations are. We also
 show multiple practical examples of using asynchronous shares. The new system can be effectively
-used to consume services on the internet. It fits nicely into existing iTasks programs and requires
+used to consume services on the internet. It fits nicely into existing {iTasks} programs and requires
 few changes in existing programs.},
-       language = {en},
-       school = {Radboud University},
-       author = {B\"{o}hm, Haye},
-       month = jan,
-       year = {2019},
+       pagetotal = {72},
+       institution = {Radboud University},
+       type = {Master's Thesis},
+       author = {Böhm, Haye},
+       date = {2019-01-14},
+       langid = {english},
        file = {Bohm - Asynchronous Actions in a Synchronous World.pdf:/home/mrl/.local/share/zotero/storage/D3IYPAM5/Bohm - Asynchronous Actions in a Synchronous World.pdf:application/pdf},
 }
 
 @inproceedings{hentschel_supersensors:_2016,
-       address = {Vienna, Austria},
-       title = {Supersensors: {Raspberry} {Pi} {Devices} for {Smart} {Campus} {Infrastructure}},
+       location = {Vienna, Austria},
+       title = {Supersensors: Raspberry Pi Devices for Smart Campus Infrastructure},
        isbn = {978-1-5090-4052-0},
-       shorttitle = {Supersensors},
        doi = {10.1109/FiCloud.2016.16},
+       shorttitle = {Supersensors},
        abstract = {We describe an approach for developing a campuswide sensor network using commodity single board computers. We sketch various use cases for environmental sensor data, for different university stakeholders. Our key premise is that supersensors—sensors with significant compute capability—enable more flexible data collection, processing and reaction. In this paper, we describe the initial prototype deployment of our supersensor system in a single department at the University of Glasgow.},
-       language = {en},
-       urldate = {2019-09-04},
-       booktitle = {2016 {IEEE} 4th {International} {Conference} on {Future} {Internet} of {Things} and {Cloud} ({FiCloud})},
-       publisher = {IEEE},
-       author = {Hentschel, Kristian and Jacob, Dejice and Singer, Jeremy and Chalmers, Matthew},
-       month = aug,
-       year = {2016},
+       eventtitle = {2016 {IEEE} 4th International Conference on Future Internet of Things and Cloud ({FiCloud})},
        pages = {58--62},
+       booktitle = {2016 {IEEE} 4th International Conference on Future Internet of Things and Cloud ({FiCloud})},
+       publisher = {{IEEE}},
+       author = {Hentschel, Kristian and Jacob, Dejice and Singer, Jeremy and Chalmers, Matthew},
+       urldate = {2019-09-04},
+       date = {2016-08},
+       langid = {english},
        file = {Hentschel et al. - 2016 - Supersensors Raspberry Pi Devices for Smart Campu.pdf:/home/mrl/.local/share/zotero/storage/ATK53FN2/Hentschel et al. - 2016 - Supersensors Raspberry Pi Devices for Smart Campu.pdf:application/pdf},
 }
 
 @inproceedings{feijs_multi-tasking_2013,
-       address = {Wuxi, China},
-       title = {Multi-tasking and {Arduino} : why and how?},
+       location = {Wuxi, China},
+       title = {Multi-tasking and Arduino : why and how?},
        isbn = {978-90-386-3462-3},
        abstract = {In this article I argue that it is important to develop experiential prototypes which have multi-tasking capabilities. At the same time I show that for embedded prototype software based on the popular Arduino platform this is not too difficult. The approach is explained and illustrated using technical examples – practical and hands-on, down to the code level. At the same time a few helpful notations for designing and documenting the software are introduced and illustrated by the same examples. Finally a few case studies of the technical approach are listed.},
-       language = {English},
-       booktitle = {8th {International} {Conference} on {Design} and {Semantics} of {Form} and {Movement} ({DeSForM} 2013)},
+       eventtitle = {8th International Conference on Design and Semantics of Form and Movement ({DeSForM} 2013)},
+       pages = {119--127},
+       booktitle = {8th International Conference on Design and Semantics of Form and Movement ({DeSForM} 2013)},
        author = {Feijs, Loe},
        editor = {Chen, L. L. and Djajadiningrat, T. and Feijs, L. M. G. and Fraser, S. and Hu, J. and Kyffin, S. and Steffen, D.},
-       year = {2013},
-       pages = {119--127},
+       date = {2013},
        file = {Feijs - 2013 - Multi-tasking and Arduino why and how.pdf:/home/mrl/.local/share/zotero/storage/8A3Q8LHA/Feijs - 2013 - Multi-tasking and Arduino why and how.pdf:application/pdf},
 }
 
@@ -616,109 +620,114 @@ few changes in existing programs.},
        title = {A case study on using functional programming for internet of things applications},
        volume = {3},
        number = {1},
-       journal = {Athens Journal of Technology \& Engineering},
+       journaltitle = {Athens Journal of Technology \& Engineering},
        author = {Haenisch, Till},
-       year = {2016},
+       date = {2016},
        file = {Haenisch - 2016 - A case study on using functional programming for i.pdf:/home/mrl/.local/share/zotero/storage/EID5EW5N/Haenisch - 2016 - A case study on using functional programming for i.pdf:application/pdf},
 }
 
 @misc{achten_clean_2007,
-       title = {Clean for {Haskell98} {Programmers}},
+       title = {Clean for Haskell98 Programmers},
        url = {https://www.mbsd.cs.ru.nl/publications/papers/2007/achp2007-CleanHaskellQuickGuide.pdf},
-       language = {en},
        author = {Achten, Peter},
-       month = jul,
-       year = {2007},
+       date = {2007-07-13},
+       langid = {english},
        file = {Achten - Clean for Haskell98 Programmers.pdf:/home/mrl/.local/share/zotero/storage/69WWSGLF/Achten - Clean for Haskell98 Programmers.pdf:application/pdf},
 }
 
 @inproceedings{grebe_threading_2019,
-       address = {Cham},
-       title = {Threading the {Arduino} with {Haskell}},
+       location = {Cham},
+       title = {Threading the Arduino with Haskell},
        isbn = {978-3-030-14805-8},
        abstract = {Programming embedded microcontrollers often requires the scheduling of independent threads of execution, specifying the interaction and sequencing of actions in the multiple threads. Developing and debugging such multi-threaded systems can be especially challenging in highly resource constrained systems such as the Arduino line of microcontroller boards. The Haskino library, developed at the University of Kansas, allows programmers to develop code for Arduino-based microcontrollers using monadic Haskell program fragments. This paper describes our efforts to extend the Haskino library to translate monadic Haskell code to multi-threaded code executing on Arduino boards.},
-       booktitle = {Trends in {Functional} {Programming}},
+       pages = {135--154},
+       booktitle = {Trends in Functional Programming},
        publisher = {Springer International Publishing},
        author = {Grebe, Mark and Gill, Andy},
        editor = {Van Horn, David and Hughes, John},
-       year = {2019},
-       pages = {135--154},
+       date = {2019},
        file = {Grebe and Gill - Threading the Arduino with Haskell.pdf:/home/mrl/.local/share/zotero/storage/DW5PS9ZA/Grebe and Gill - Threading the Arduino with Haskell.pdf:application/pdf},
 }
 
 @inproceedings{baccelli_reprogramming_2018,
-       title = {Reprogramming {Low}-end {IoT} {Devices} from the {Cloud}},
-       booktitle = {2018 3rd {Cloudification} of the {Internet} of {Things} ({CIoT})},
-       publisher = {IEEE},
-       author = {Baccelli, Emmanuel and Doerr, Joerg and Jallouli, Ons and Kikuchi, Shinji and Morgenstern, Andreas and Padilla, Francisco Acosta and Schleiser, Kaspar and Thomas, Ian},
-       year = {2018},
+       title = {Reprogramming Low-end {IoT} Devices from the Cloud},
        pages = {1--6},
+       booktitle = {2018 3rd Cloudification of the Internet of Things ({CIoT})},
+       publisher = {{IEEE}},
+       author = {Baccelli, Emmanuel and Doerr, Joerg and Jallouli, Ons and Kikuchi, Shinji and Morgenstern, Andreas and Padilla, Francisco Acosta and Schleiser, Kaspar and Thomas, Ian},
+       date = {2018},
        file = {Baccelli et al. - 2018 - Reprogramming Low-end IoT Devices from the Cloud.pdf:/home/mrl/.local/share/zotero/storage/M6LX5ZJN/Baccelli et al. - 2018 - Reprogramming Low-end IoT Devices from the Cloud.pdf:application/pdf},
 }
 
-@phdthesis{alimarine_generic_2005,
-       address = {Nijmegen},
-       type = {{PhD} {Thesis}},
-       title = {Generic {Functional} {Programming}},
-       language = {en},
-       school = {Radboud University},
+@thesis{alimarine_generic_2005,
+       location = {Nijmegen},
+       title = {Generic Functional Programming},
+       pagetotal = {198},
+       institution = {Radboud University},
+       type = {phdthesis},
        author = {Alimarine, Artem},
-       year = {2005},
+       date = {2005},
+       langid = {english},
        file = {Alimarine - Generic Functional Programming.pdf:/home/mrl/.local/share/zotero/storage/L4THNJHB/Alimarine - Generic Functional Programming.pdf:application/pdf},
 }
 
 @inproceedings{wand_continuation-based_1980,
-       address = {Stanford University, California, United States},
+       location = {Stanford University, California, United States},
        title = {Continuation-based multiprocessing},
        doi = {10.1145/800087.802786},
        abstract = {Any multiprocessing facility must include three features: elementary exclusion, data protection, and process saving. While elementary exclusion must rest on some hardware facility (e.g., a test-and-set instruction), the other two requirements are fulfilled by features already present in applicative languages. Data protection may be obtained through the use of procedures (closures or funargs), and process saving may be obtained through the use of the catch operator. The use of catch, in particular, allows an elegant treatment of process saving.},
-       language = {en},
-       urldate = {2019-02-13},
+       eventtitle = {the 1980 {ACM} conference},
+       pages = {19--28},
        booktitle = {Proceedings of the 1980 {ACM} conference on {LISP} and functional programming  - {LFP} '80},
-       publisher = {ACM Press},
+       publisher = {{ACM} Press},
        author = {Wand, Mitchell},
-       year = {1980},
-       pages = {19--28},
+       urldate = {2019-02-13},
+       date = {1980},
+       langid = {english},
        file = {Wand - 1980 - Continuation-based multiprocessing.pdf:/home/mrl/.local/share/zotero/storage/XF4Z2R9S/Wand - 1980 - Continuation-based multiprocessing.pdf:application/pdf},
 }
 
 @inproceedings{elliott_functional_1997,
        title = {Functional reactive animation},
        volume = {32},
-       booktitle = {{ACM} {SIGPLAN} {Notices}},
-       publisher = {ACM},
-       author = {Elliott, Conal and Hudak, Paul},
-       year = {1997},
        pages = {263--273},
+       booktitle = {{ACM} {SIGPLAN} Notices},
+       publisher = {{ACM}},
+       author = {Elliott, Conal and Hudak, Paul},
+       date = {1997},
        file = {Elliott and Hudak - 1997 - Functional reactive animation.pdf:/home/mrl/.local/share/zotero/storage/IJZLGXHK/Elliott and Hudak - 1997 - Functional reactive animation.pdf:application/pdf},
 }
 
-@mastersthesis{piers_task-oriented_2016,
-       address = {Nijmegen},
-       title = {Task-{Oriented} {Programming} for developing non-distributed interruptible embedded systems},
-       language = {en},
-       school = {Radboud University},
+@thesis{piers_task-oriented_2016,
+       location = {Nijmegen},
+       title = {Task-Oriented Programming for developing non-distributed interruptible embedded systems},
+       pagetotal = {81},
+       institution = {Radboud University},
+       type = {Master's Thesis},
        author = {Piers, Jasper},
-       year = {2016},
+       date = {2016},
+       langid = {english},
        file = {Piers - Task-Oriented Programming for developing non-distr.pdf:/home/mrl/.local/share/zotero/storage/X8BZM9D4/Piers - Task-Oriented Programming for developing non-distr.pdf:application/pdf},
 }
 
 @inproceedings{baccelli_scripting_2018,
-       title = {Scripting {Over}-{The}-{Air}: {Towards} {Containers} on {Low}-end {Devices} in the {Internet} of {Things}},
+       title = {Scripting Over-The-Air: Towards Containers on Low-end Devices in the Internet of Things},
        booktitle = {{IEEE} {PerCom} 2018},
        author = {Baccelli, Emmanuel and Doerr, Joerg and Kikuchi, Shinji and Padilla, Francisco and Schleiser, Kaspar and Thomas, Ian},
-       year = {2018},
+       date = {2018},
        file = {Baccelli et al. - Scripting Over-The-Air Towards Containers on Low-.pdf:/home/mrl/.local/share/zotero/storage/98UTMFAC/Baccelli et al. - Scripting Over-The-Air Towards Containers on Low-.pdf:application/pdf},
 }
 
-@mastersthesis{amazonas_cabral_de_andrade_developing_2018,
-       address = {Nijmegen},
-       title = {Developing {Real} {Life}, {Task} {Oriented} {Applications} for the {Internet} of {Things}},
-       shorttitle = {Developing {Real} {Life}, {TOP} {Applications} for the {IOT}},
-       language = {en},
-       school = {Radboud University},
+@thesis{amazonas_cabral_de_andrade_developing_2018,
+       location = {Nijmegen},
+       title = {Developing Real Life, Task Oriented Applications for the Internet of Things},
+       shorttitle = {Developing Real Life, {TOP} Applications for the {IOT}},
+       pagetotal = {60},
+       institution = {Radboud University},
+       type = {Master's Thesis},
        author = {Amazonas Cabral de Andrade, Matheus},
-       year = {2018},
+       date = {2018},
+       langid = {english},
        file = {Lubbers - prof. dr. dr.h.c. ir. M.J. Plasmeijer.pdf:/home/mrl/.local/share/zotero/storage/JXPEWS85/Lubbers - prof. dr. dr.h.c. ir. M.J. Plasmeijer.pdf:application/pdf},
 }
 
@@ -726,59 +735,59 @@ few changes in existing programs.},
        title = {Data types à la carte},
        volume = {18},
        doi = {10.1017/S0956796808006758},
+       pages = {423--436},
        number = {4},
-       journal = {Journal of functional programming},
+       journaltitle = {Journal of functional programming},
        author = {Swierstra, Wouter},
-       year = {2008},
-       pages = {423--436},
+       date = {2008},
        file = {swierstra2008.pdf:/home/mrl/.local/share/zotero/storage/BEQKBXWP/swierstra2008.pdf:application/pdf},
 }
 
 @article{van_groningen_exchanging_2010,
-       title = {Exchanging sources between {Clean} and {Haskell}: {A} double-edged front end for the {Clean} compiler},
+       title = {Exchanging sources between Clean and Haskell: A double-edged front end for the Clean compiler},
        volume = {45},
-       shorttitle = {Exchanging sources between {Clean} and {Haskell}},
-       number = {11},
-       journal = {ACM Sigplan Notices},
-       author = {\noopsort{Groningen}{van Groningen}, John and \noopsort{Noort}{van Noort}, Thomas and Achten, Peter and Koopman, Pieter and Plasmeijer, Rinus},
-       year = {2010},
+       shorttitle = {Exchanging sources between Clean and Haskell},
        pages = {49--60},
+       number = {11},
+       journaltitle = {{ACM} Sigplan Notices},
+       author = {van Groningen, John and van Noort, Thomas and Achten, Peter and Koopman, Pieter and Plasmeijer, Rinus},
+       date = {2010},
        file = {groj10-Haskell_front_end_Clean.pdf:/home/mrl/.local/share/zotero/storage/WVZWX8WT/groj10-Haskell_front_end_Clean.pdf:application/pdf},
 }
 
 @inproceedings{grebe_haskino:_2016,
-       title = {Haskino: {A} remote monad for programming the arduino},
+       title = {Haskino: A remote monad for programming the arduino},
        shorttitle = {Haskino},
-       booktitle = {International {Symposium} on {Practical} {Aspects} of {Declarative} {Languages}},
+       pages = {153--168},
+       booktitle = {International Symposium on Practical Aspects of Declarative Languages},
        publisher = {Springer},
        author = {Grebe, Mark and Gill, Andy},
-       year = {2016},
-       pages = {153--168},
+       date = {2016},
        file = {Grebe-16-Haskino.pdf:/home/mrl/.local/share/zotero/storage/ABG7TTLV/Grebe-16-Haskino.pdf:application/pdf},
 }
 
 @article{plasmeijer_itasks:_2007,
        title = {{iTasks}: executable specifications of interactive work flow systems for the web},
        volume = {42},
+       pages = {141--152},
        number = {9},
-       journal = {ACM SIGPLAN Notices},
+       journaltitle = {{ACM} {SIGPLAN} Notices},
        author = {Plasmeijer, Rinus and Achten, Peter and Koopman, Pieter},
-       year = {2007},
-       pages = {141--152},
+       date = {2007},
        file = {plar2007-ICFP07-iTasks.pdf:/home/mrl/.local/share/zotero/storage/N8EUZP7D/plar2007-ICFP07-iTasks.pdf:application/pdf},
 }
 
 @incollection{plasmeijer_shallow_2016,
-       address = {Cham},
-       series = {Lecture {Notes} in {Computer} {Science}},
-       title = {A {Shallow} {Embedded} {Type} {Safe} {Extendable} {DSL} for the {Arduino}},
+       location = {Cham},
+       title = {A Shallow Embedded Type Safe Extendable {DSL} for the Arduino},
        volume = {9547},
        isbn = {978-3-319-39110-6},
-       urldate = {2017-02-22},
-       booktitle = {Trends in {Functional} {Programming}},
+       series = {Lecture Notes in Computer Science},
+       booktitle = {Trends in Functional Programming},
        publisher = {Springer International Publishing},
        author = {Plasmeijer, Rinus and Koopman, Pieter},
-       year = {2016},
+       urldate = {2017-02-22},
+       date = {2016},
        doi = {10.1007/978-3-319-39110-6},
        file = {chp%3A10.1007%2F978-3-319-39110-6_6.pdf:/home/mrl/.local/share/zotero/storage/TJVP6FHF/chp%3A10.1007%2F978-3-319-39110-6_6.pdf:application/pdf},
 }
@@ -786,208 +795,204 @@ few changes in existing programs.},
 @inproceedings{cheney_lightweight_2002,
        title = {A lightweight implementation of generics and dynamics},
        doi = {10.1145/581690.581698},
-       urldate = {2017-05-15},
-       booktitle = {Proceedings of the 2002 {ACM} {SIGPLAN} workshop on {Haskell}},
-       publisher = {ACM},
+       pages = {90--104},
+       booktitle = {Proceedings of the 2002 {ACM} {SIGPLAN} workshop on Haskell},
+       publisher = {{ACM}},
        author = {Cheney, James and Hinze, Ralf},
-       year = {2002},
-       note = {event-place: Pittsburgh Pennsylvania, USA},
+       urldate = {2017-05-15},
+       date = {2002},
+       note = {event-place: Pittsburgh Pennsylvania, {USA}},
        keywords = {dynamic typing, generic programming, type representations},
-       pages = {90--104},
        file = {Cheney and Hinze - 2002 - A lightweight implementation of generics and dynam.pdf:/home/mrl/.local/share/zotero/storage/FZ6EGJRJ/Cheney and Hinze - 2002 - A lightweight implementation of generics and dynam.pdf:application/pdf;HW02.pdf:/home/mrl/.local/share/zotero/storage/A8Z49NK6/HW02.pdf:application/pdf},
 }
 
 @article{lilis_survey_2019,
-       title = {A {Survey} of {Metaprogramming} {Languages}},
+       title = {A Survey of Metaprogramming Languages},
        volume = {52},
        issn = {0360-0300},
        doi = {10.1145/3354584},
        abstract = {Metaprogramming is the process of writing computer programs that treat programs as data, enabling them to analyze or transform existing programs or generate new ones. While the concept of metaprogramming has existed for several decades, activities focusing on metaprogramming have been increasing rapidly over the past few years, with most languages offering some metaprogramming support and the amount of metacode being developed growing exponentially. In this article, we introduce a taxonomy of metaprogramming languages and present a survey of metaprogramming languages and systems based on the taxonomy. Our classification is based on the metaprogramming model adopted by the language, the phase of the metaprogram evaluation, the metaprogram source location, and the relation between the metalanguage and the object language.},
        number = {6},
-       journal = {ACM Comput. Surv.},
+       journaltitle = {{ACM} Comput. Surv.},
        author = {Lilis, Yannis and Savidis, Anthony},
-       month = oct,
-       year = {2019},
-       note = {Place: New York, NY, USA
-Publisher: ACM},
+       date = {2019-10},
+       note = {Place: New York, {NY}, {USA}
+Publisher: {ACM}},
        keywords = {aspect-oriented programming, generative programming, macro systems, meta-object protocols, Metaprogramming, multistage languages, reflection},
        file = {Lilis and Savidis - 2019 - A Survey of Metaprogramming Languages.pdf:/home/mrl/.local/share/zotero/storage/9MS6TUNR/Lilis and Savidis - 2019 - A Survey of Metaprogramming Languages.pdf:application/pdf},
 }
 
 @inproceedings{mainland_why_2007,
-       address = {New York, NY, USA},
-       series = {Haskell '07},
-       title = {Why {It}'s {Nice} to {Be} {Quoted}: {Quasiquoting} for {Haskell}},
+       location = {New York, {NY}, {USA}},
+       title = {Why It's Nice to Be Quoted: Quasiquoting for Haskell},
        isbn = {978-1-59593-674-5},
        doi = {10.1145/1291201.1291211},
-       abstract = {Quasiquoting allows programmers to use domain specific syntax to construct program fragments. By providing concrete syntax for complex data types, programs become easier to read, easier to write, and easier to reason about and maintain. Haskell is an excellent host language for embedded domain specific languages, and quasiquoting ideally complements the language features that make Haskell perform so well in this area. Unfortunately, until now no Haskell compiler has provided support for quasiquoting. We present an implementation in GHC and demonstrate that by leveraging existing compiler capabilities, building a full quasiquoter requires little more work than writing a parser. Furthermore, we provide a compile-time guarantee that all quasiquoted data is type-correct.},
-       booktitle = {Proceedings of the {ACM} {SIGPLAN} {Workshop} on {Haskell} {Workshop}},
-       publisher = {ACM},
+       series = {Haskell '07},
+       abstract = {Quasiquoting allows programmers to use domain specific syntax to construct program fragments. By providing concrete syntax for complex data types, programs become easier to read, easier to write, and easier to reason about and maintain. Haskell is an excellent host language for embedded domain specific languages, and quasiquoting ideally complements the language features that make Haskell perform so well in this area. Unfortunately, until now no Haskell compiler has provided support for quasiquoting. We present an implementation in {GHC} and demonstrate that by leveraging existing compiler capabilities, building a full quasiquoter requires little more work than writing a parser. Furthermore, we provide a compile-time guarantee that all quasiquoted data is type-correct.},
+       pages = {73--82},
+       booktitle = {Proceedings of the {ACM} {SIGPLAN} Workshop on Haskell Workshop},
+       publisher = {{ACM}},
        author = {Mainland, Geoffrey},
-       year = {2007},
+       date = {2007},
        note = {event-place: Freiburg, Germany},
        keywords = {meta programming, quasiquoting},
-       pages = {73--82},
        file = {Mainland - 2007 - Why It's Nice to Be Quoted Quasiquoting for Haske.pdf:/home/mrl/.local/share/zotero/storage/PSJ59GY2/Mainland - 2007 - Why It's Nice to Be Quoted Quasiquoting for Haske.pdf:application/pdf},
 }
 
 @article{tratt_domain_2008,
-       title = {Domain {Specific} {Language} {Implementation} via {Compile}-{Time} {Meta}-{Programming}},
+       title = {Domain Specific Language Implementation via Compile-Time Meta-Programming},
        volume = {30},
        issn = {0164-0925},
        doi = {10.1145/1391956.1391958},
-       abstract = {Domain specific languages (DSLs) are mini-languages that are increasingly seen as being a valuable tool for software developers and non-developers alike. DSLs must currently be created in an ad-hoc fashion, often leading to high development costs and implementations of variable quality. In this article, I show how expressive DSLs can be hygienically embedded in the Converge programming language using its compile-time meta-programming facility, the concept of DSL blocks, and specialised error reporting techniques. By making use of pre-existing facilities, and following a simple methodology, DSL implementation costs can be significantly reduced whilst leading to higher quality DSL implementations.},
+       abstract = {Domain specific languages ({DSLs}) are mini-languages that are increasingly seen as being a valuable tool for software developers and non-developers alike. {DSLs} must currently be created in an ad-hoc fashion, often leading to high development costs and implementations of variable quality. In this article, I show how expressive {DSLs} can be hygienically embedded in the Converge programming language using its compile-time meta-programming facility, the concept of {DSL} blocks, and specialised error reporting techniques. By making use of pre-existing facilities, and following a simple methodology, {DSL} implementation costs can be significantly reduced whilst leading to higher quality {DSL} implementations.},
        number = {6},
-       journal = {ACM Trans. Program. Lang. Syst.},
+       journaltitle = {{ACM} Trans. Program. Lang. Syst.},
        author = {Tratt, Laurence},
-       month = oct,
-       year = {2008},
-       note = {Place: New York, NY, USA
-Publisher: ACM},
-       keywords = {compile-time meta-programming, domain specific languages, Syntax extension},
+       date = {2008-10},
+       note = {Place: New York, {NY}, {USA}
+Publisher: {ACM}},
+       keywords = {domain specific languages, compile-time meta-programming, Syntax extension},
        file = {Tratt - 2008 - Domain Specific Language Implementation via Compil.pdf:/home/mrl/.local/share/zotero/storage/HHGYJK4H/Tratt - 2008 - Domain Specific Language Implementation via Compil.pdf:application/pdf},
 }
 
 @inproceedings{kariotis_making_2008,
-       address = {New York, NY, USA},
-       series = {Haskell '08},
-       title = {Making {Monads} {First}-{Class} with {Template} {Haskell}},
+       location = {New York, {NY}, {USA}},
+       title = {Making Monads First-Class with Template Haskell},
        isbn = {978-1-60558-064-7},
        doi = {10.1145/1411286.1411300},
-       abstract = {Monads as an organizing principle for programming and semantics are notoriously difficult to grasp, yet they are a central and powerful abstraction in Haskell. This paper introduces a domain-specific language, MonadLab, that simplifies the construction of monads, and describes its implementation in Template Haskell. MonadLab makes monad construction truly first class, meaning that arcane theoretical issues with respect to monad transformers are completely hidden from the programmer. The motivation behind the design of MonadLab is to make monadic programming in Haskell simpler while providing a tool for non-Haskell experts that will assist them in understanding this powerful abstraction.},
-       booktitle = {Proceedings of the {First} {ACM} {SIGPLAN} {Symposium} on {Haskell}},
-       publisher = {ACM},
+       series = {Haskell '08},
+       abstract = {Monads as an organizing principle for programming and semantics are notoriously difficult to grasp, yet they are a central and powerful abstraction in Haskell. This paper introduces a domain-specific language, {MonadLab}, that simplifies the construction of monads, and describes its implementation in Template Haskell. {MonadLab} makes monad construction truly first class, meaning that arcane theoretical issues with respect to monad transformers are completely hidden from the programmer. The motivation behind the design of {MonadLab} is to make monadic programming in Haskell simpler while providing a tool for non-Haskell experts that will assist them in understanding this powerful abstraction.},
+       pages = {99--110},
+       booktitle = {Proceedings of the First {ACM} {SIGPLAN} Symposium on Haskell},
+       publisher = {{ACM}},
        author = {Kariotis, Pericles S. and Procter, Adam M. and Harrison, William L.},
-       year = {2008},
-       note = {event-place: Victoria, BC, Canada},
+       date = {2008},
+       note = {event-place: Victoria, {BC}, Canada},
        keywords = {domain-specific languages, monads, staged programming},
-       pages = {99--110},
        file = {Kariotis et al. - 2008 - Making Monads First-Class with Template Haskell.pdf:/home/mrl/.local/share/zotero/storage/ZLX24WE8/Kariotis et al. - 2008 - Making Monads First-Class with Template Haskell.pdf:application/pdf},
 }
 
 @inproceedings{gill_haskell_2009,
-       address = {Berlin, Heidelberg},
-       title = {A {Haskell} {Hosted} {DSL} for {Writing} {Transformation} {Systems}},
+       location = {Berlin, Heidelberg},
+       title = {A Haskell Hosted {DSL} for Writing Transformation Systems},
        isbn = {978-3-642-03034-5},
-       abstract = {KURE is a Haskell hosted Domain Specific Language (DSL) for writing transformation systems based on rewrite strategies. When writing transformation systems, a significant amount of engineering effort goes into setting up plumbing to make sure that specific rewrite rules can fire. Systems like Stratego and Strafunski provide most of this plumbing as infrastructure, allowing the DSL user to focus on the rewrite rules. KURE is a strongly typed strategy control language in the tradition of Stratego and Strafunski. It is intended for writing reasonably efficient rewrite systems, makes use of type families to provide a delimited generic mechanism for tree rewriting, and provides support for efficient identity rewrite detection.},
-       booktitle = {Domain-{Specific} {Languages}},
+       abstract = {{KURE} is a Haskell hosted Domain Specific Language ({DSL}) for writing transformation systems based on rewrite strategies. When writing transformation systems, a significant amount of engineering effort goes into setting up plumbing to make sure that specific rewrite rules can fire. Systems like Stratego and Strafunski provide most of this plumbing as infrastructure, allowing the {DSL} user to focus on the rewrite rules. {KURE} is a strongly typed strategy control language in the tradition of Stratego and Strafunski. It is intended for writing reasonably efficient rewrite systems, makes use of type families to provide a delimited generic mechanism for tree rewriting, and provides support for efficient identity rewrite detection.},
+       pages = {285--309},
+       booktitle = {Domain-Specific Languages},
        publisher = {Springer Berlin Heidelberg},
        author = {Gill, Andy},
        editor = {Taha, Walid Mohamed},
-       year = {2009},
-       pages = {285--309},
+       date = {2009},
        file = {Gill2009_Chapter_AHaskellHostedDSLForWritingTra.pdf:/home/mrl/.local/share/zotero/storage/I9RJNDYR/Gill2009_Chapter_AHaskellHostedDSLForWritingTra.pdf:application/pdf},
 }
 
 @book{peyton_jones_implementation_1987,
-       address = {Hertfordshire},
-       title = {The {Implementation} of {Functional} {Programming} {Languages}},
+       location = {Hertfordshire},
+       title = {The Implementation of Functional Programming Languages},
        url = {https://www.microsoft.com/en-us/research/publication/the-implementation-of-functional-programming-languages/},
-       abstract = {My 1987 book is now out of print, but it is available here in its entirety in PDF form, in one of two formats: single-page portrait double-page landscape Both are fully searchable, thanks to OCR and Norman Ramsey. Errata Section 5.2.4, p87. We need an extra rule match us [] E = E This accounts for the possibility that in the constructor rule (Section 5.2.4) there may be some non-nullary constructors for which there are no equations. P168, line 2, "VAR" should be "TVAR".},
+       abstract = {My 1987 book is now out of print, but it is available here in its entirety in {PDF} form, in one of two formats: single-page portrait double-page landscape Both are fully searchable, thanks to {OCR} and Norman Ramsey. Errata Section 5.2.4, p87. We need an extra rule match us [] E = E This accounts for the possibility that in the constructor rule (Section 5.2.4) there may be some non-nullary constructors for which there are no equations. P168, line 2, "{VAR}" should be "{TVAR}".},
        publisher = {Prentice Hall},
        author = {Peyton Jones, Simon},
-       month = jan,
-       year = {1987},
+       date = {1987-01},
        file = {Peyton Jones - 1987 - The Implementation of Functional Programming Langu.pdf:/home/mrl/.local/share/zotero/storage/9RIR6KGD/Peyton Jones - 1987 - The Implementation of Functional Programming Langu.pdf:application/pdf},
 }
 
 @inproceedings{sheard_template_2002,
-       address = {New York, NY, USA},
-       series = {Haskell '02},
-       title = {Template {Meta}-{Programming} for {Haskell}},
+       location = {New York, {NY}, {USA}},
+       title = {Template Meta-Programming for Haskell},
        isbn = {1-58113-605-6},
        doi = {10.1145/581690.581691},
+       series = {Haskell '02},
        abstract = {We propose a new extension to the purely functional programming language Haskell that supports compile-time meta-programming. The purpose of the system is to support the algorithmic construction of programs at compile-time.The ability to generate code at compile time allows the programmer to implement such features as polytypic programs, macro-like expansion, user directed optimization (such as inlining), and the generation of supporting data structures and functions from existing data structures and functions.Our design is being implemented in the Glasgow Haskell Compiler, ghc.},
-       booktitle = {Proceedings of the 2002 {ACM} {SIGPLAN} {Workshop} on {Haskell}},
-       publisher = {ACM},
+       pages = {1--16},
+       booktitle = {Proceedings of the 2002 {ACM} {SIGPLAN} Workshop on Haskell},
+       publisher = {{ACM}},
        author = {Sheard, Tim and Peyton Jones, Simon},
-       year = {2002},
+       date = {2002},
        note = {event-place: Pittsburgh, Pennsylvania},
        keywords = {meta programming, templates},
-       pages = {1--16},
        file = {Sheard and Jones - 2002 - Template Meta-Programming for Haskell.pdf:/home/mrl/.local/share/zotero/storage/2GSK6DSF/Sheard and Jones - 2002 - Template Meta-Programming for Haskell.pdf:application/pdf},
 }
 
 @inproceedings{seefried_optimising_2004,
-       address = {Berlin, Heidelberg},
-       title = {Optimising {Embedded} {DSLs} {Using} {Template} {Haskell}},
+       location = {Berlin, Heidelberg},
+       title = {Optimising Embedded {DSLs} Using Template Haskell},
        isbn = {978-3-540-30175-2},
-       abstract = {Embedded domain specific languages (EDSLs) provide a specialised language for a particular application area while harnessing the infrastructure of an existing general purpose programming language. The reduction in implementation costs that results from this approach comes at a price: the EDSL often compiles to inefficient code since the host language's compiler only optimises at the level of host language constructs. The paper presents an approach to solving this problem based on compile-time meta-programming which retains the simplicity of the embedded approach. We use PanTHeon, our implementation of an existing EDSL for image synthesis to demonstrate the benefits and drawbacks of this approach. Furthermore, we suggest potential improvements to Template Haskell, the meta-programming framework we are using, which would greatly improve its applicability to this kind of task.},
-       booktitle = {Generative {Programming} and {Component} {Engineering}},
+       abstract = {Embedded domain specific languages ({EDSLs}) provide a specialised language for a particular application area while harnessing the infrastructure of an existing general purpose programming language. The reduction in implementation costs that results from this approach comes at a price: the {EDSL} often compiles to inefficient code since the host language's compiler only optimises at the level of host language constructs. The paper presents an approach to solving this problem based on compile-time meta-programming which retains the simplicity of the embedded approach. We use {PanTHeon}, our implementation of an existing {EDSL} for image synthesis to demonstrate the benefits and drawbacks of this approach. Furthermore, we suggest potential improvements to Template Haskell, the meta-programming framework we are using, which would greatly improve its applicability to this kind of task.},
+       pages = {186--205},
+       booktitle = {Generative Programming and Component Engineering},
        publisher = {Springer Berlin Heidelberg},
        author = {Seefried, Sean and Chakravarty, Manuel and Keller, Gabriele},
        editor = {Karsai, Gabor and Visser, Eelco},
-       year = {2004},
-       pages = {186--205},
+       date = {2004},
        file = {Seefried et al. - 2004 - Optimising Embedded DSLs Using Template Haskell.pdf:/home/mrl/.local/share/zotero/storage/ZRKQ9AH6/Seefried et al. - 2004 - Optimising Embedded DSLs Using Template Haskell.pdf:application/pdf},
 }
 
 @article{hammond_automatic_2003,
-       title = {Automatic {Skeletons} in {Template} {Haskell}},
+       title = {Automatic Skeletons in Template Haskell},
        volume = {13},
        doi = {10.1142/S0129626403001380},
        abstract = {This paper uses Template Haskell to automatically select appropriate skeleton implementations in the Eden parallel dialect of Haskell. The approach allows implementation parameters to be statically tuned according to architectural cost models based on source analyses. This permits us to target a range of parallel architecture classes from a single source specification. A major advantage of the approach is that cost models are user-definable and can be readily extended to new data or computation structures etc.},
-       number = {03},
-       journal = {Parallel Processing Letters},
-       author = {Hammond, Kevin and Berthold, Jost and Loogen, Rita},
-       year = {2003},
        pages = {413--424},
+       number = {3},
+       journaltitle = {Parallel Processing Letters},
+       author = {Hammond, Kevin and Berthold, Jost and Loogen, Rita},
+       date = {2003},
        file = {Hammond et al. - 2003 - AUTOMATIC SKELETONS IN TEMPLATE HASKELL.pdf:/home/mrl/.local/share/zotero/storage/HBQ8UXY3/Hammond et al. - 2003 - AUTOMATIC SKELETONS IN TEMPLATE HASKELL.pdf:application/pdf},
 }
 
 @inproceedings{adams_template_2012,
-       address = {New York, NY, USA},
-       series = {Haskell '12},
-       title = {Template {Your} {Boilerplate}: {Using} {Template} {Haskell} for {Efficient} {Generic} {Programming}},
+       location = {New York, {NY}, {USA}},
+       title = {Template Your Boilerplate: Using Template Haskell for Efficient Generic Programming},
        isbn = {978-1-4503-1574-6},
        doi = {10.1145/2364506.2364509},
+       series = {Haskell '12},
        abstract = {Generic programming allows the concise expression of algorithms that would otherwise require large amounts of handwritten code. A number of such systems have been developed over the years, but a common drawback of these systems is poor runtime performance relative to handwritten, non-generic code. Generic-programming systems vary significantly in this regard, but few consistently match the performance of handwritten code. This poses a dilemma for developers. Generic-programming systems offer concision but cost performance. Handwritten code offers performance but costs concision.This paper explores the use of Template Haskell to achieve the best of both worlds. It presents a generic-programming system for Haskell that provides both the concision of other generic-programming systems and the efficiency of handwritten code. Our system gives the programmer a high-level, generic-programming interface, but uses Template Haskell to generate efficient, non-generic code that outperforms existing generic-programming systems for Haskell.This paper presents the results of benchmarking our system against both handwritten code and several other generic-programming systems. In these benchmarks, our system matches the performance of handwritten code while other systems average anywhere from two to twenty times slower.},
-       booktitle = {Proceedings of the 2012 {Haskell} {Symposium}},
-       publisher = {ACM},
-       author = {Adams, Michael D. and DuBuisson, Thomas M.},
-       year = {2012},
+       pages = {13--24},
+       booktitle = {Proceedings of the 2012 Haskell Symposium},
+       publisher = {{ACM}},
+       author = {Adams, Michael D. and {DuBuisson}, Thomas M.},
+       date = {2012},
        note = {event-place: Copenhagen, Denmark},
        keywords = {generic programming, scrap your boilerplate, template haskell},
-       pages = {13--24},
        file = {Adams and DuBuisson - 2012 - Template Your Boilerplate Using Template Haskell .pdf:/home/mrl/.local/share/zotero/storage/ANAHWLB5/Adams and DuBuisson - 2012 - Template Your Boilerplate Using Template Haskell .pdf:application/pdf},
 }
 
 @inproceedings{norell_prototyping_2004,
-       address = {Berlin, Heidelberg},
-       title = {Prototyping {Generic} {Programming} in {Template} {Haskell}},
+       location = {Berlin, Heidelberg},
+       title = {Prototyping Generic Programming in Template Haskell},
        isbn = {978-3-540-27764-4},
-       abstract = {Generic Programming deals with the construction of programs that can be applied to many different datatypes. This is achieved by parameterizing the generic programs by the structure of the datatypes on which they are to be applied. Programs that can be defined generically range from simple map functions through pretty printers to complex XML tools.},
-       booktitle = {Mathematics of {Program} {Construction}},
+       abstract = {Generic Programming deals with the construction of programs that can be applied to many different datatypes. This is achieved by parameterizing the generic programs by the structure of the datatypes on which they are to be applied. Programs that can be defined generically range from simple map functions through pretty printers to complex {XML} tools.},
+       pages = {314--333},
+       booktitle = {Mathematics of Program Construction},
        publisher = {Springer Berlin Heidelberg},
        author = {Norell, Ulf and Jansson, Patrik},
        editor = {Kozen, Dexter},
-       year = {2004},
-       pages = {314--333},
+       date = {2004},
        file = {Norell and Jansson - 2004 - Prototyping Generic Programming in Template Haskel.pdf:/home/mrl/.local/share/zotero/storage/S3EXD65Z/Norell and Jansson - 2004 - Prototyping Generic Programming in Template Haskel.pdf:application/pdf},
 }
 
 @incollection{odonnell_embedding_2004,
-       address = {Berlin, Heidelberg},
-       title = {Embedding a {Hardware} {Description} {Language} in {Template} {Haskell}},
+       location = {Berlin, Heidelberg},
+       title = {Embedding a Hardware Description Language in Template Haskell},
        isbn = {978-3-540-25935-0},
-       abstract = {Hydra is a domain-specific language for designing digital circuits, which is implemented by embedding within Haskell. Many features required for hardware specification fit well within functional languages, leading in many cases to a perfect embedding. There are some situations, including netlist generation and software logic probes, where the DSL does not fit exactly within the host functional language. A new solution to these problems is based on program transformations performed automatically by metaprograms in Template Haskell.},
-       booktitle = {Domain-{Specific} {Program} {Generation}: {International} {Seminar}, {Dagstuhl} {Castle}, {Germany}, {March} 23-28, 2003. {Revised} {Papers}},
+       abstract = {Hydra is a domain-specific language for designing digital circuits, which is implemented by embedding within Haskell. Many features required for hardware specification fit well within functional languages, leading in many cases to a perfect embedding. There are some situations, including netlist generation and software logic probes, where the {DSL} does not fit exactly within the host functional language. A new solution to these problems is based on program transformations performed automatically by metaprograms in Template Haskell.},
+       pages = {143--164},
+       booktitle = {Domain-Specific Program Generation: International Seminar, Dagstuhl Castle, Germany, March 23-28, 2003. Revised Papers},
        publisher = {Springer Berlin Heidelberg},
        author = {O'Donnell, John T.},
        editor = {Lengauer, Christian and Batory, Don and Consel, Charles and Odersky, Martin},
-       year = {2004},
+       date = {2004},
        doi = {10.1007/978-3-540-25935-0_9},
-       pages = {143--164},
        file = {O'Donnell - 2004 - Embedding a Hardware Description Language in Templ.pdf:/home/mrl/.local/share/zotero/storage/Z2XT7SM3/O'Donnell - 2004 - Embedding a Hardware Description Language in Templ.pdf:application/pdf},
 }
 
 @misc{lynagh_unrolling_2003,
-       title = {Unrolling and {Simplifying} {Expressions} with {Template} {Haskell}},
+       title = {Unrolling and Simplifying Expressions with Template Haskell},
        url = {http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/papers/},
-       urldate = {2021-09-07},
        author = {Lynagh, Ian},
-       month = may,
-       year = {2003},
+       urldate = {2021-09-07},
+       date = {2003-05},
        file = {10.1.1.5.9813.pdf:/home/mrl/.local/share/zotero/storage/G4AFM8XZ/10.1.1.5.9813.pdf:application/pdf},
 }
 
@@ -995,167 +1000,170 @@ Publisher: ACM},
        title = {Compiling embedded languages},
        volume = {13},
        doi = {10.1017/S0956796802004574},
+       pages = {455--481},
        number = {3},
-       journal = {Journal of Functional Programming},
-       author = {Elliott, Conal and Finne, Sigbjørn and \noopsort{Moor}{de Moor}, Oege},
-       year = {2003},
+       journaltitle = {Journal of Functional Programming},
+       author = {Elliott, Conal and Finne, Sigbjørn and de Moor, Oege},
+       date = {2003},
        note = {Publisher: Cambridge University Press},
-       pages = {455--481},
        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},
 }
 
 @incollection{czarnecki_dsl_2004,
-       address = {Berlin, Heidelberg},
-       title = {{DSL} {Implementation} in {MetaOCaml}, {Template} {Haskell}, and {C}++},
+       location = {Berlin, Heidelberg},
+       title = {{DSL} Implementation in {MetaOCaml}, Template Haskell, and C++},
        isbn = {978-3-540-25935-0},
-       abstract = {A wide range of domain-specific languages (DSLs) has been implemented successfully by embedding them in general purpose languages. This paper reviews embedding, and summarizes how two alternative techniques – staged interpreters and templates – can be used to overcome the limitations of embedding. Both techniques involve a form of generative programming. The paper reviews and compares three programming languages that have special support for generative programming. Two of these languages (MetaOCaml and Template Haskell) are research languages, while the third (C++) is already in wide industrial use. The paper identifies several dimensions that can serve as a basis for comparing generative languages.},
-       booktitle = {Domain-{Specific} {Program} {Generation}: {International} {Seminar}, {Dagstuhl} {Castle}, {Germany}, {March} 23-28, 2003. {Revised} {Papers}},
+       abstract = {A wide range of domain-specific languages ({DSLs}) has been implemented successfully by embedding them in general purpose languages. This paper reviews embedding, and summarizes how two alternative techniques – staged interpreters and templates – can be used to overcome the limitations of embedding. Both techniques involve a form of generative programming. The paper reviews and compares three programming languages that have special support for generative programming. Two of these languages ({MetaOCaml} and Template Haskell) are research languages, while the third (C++) is already in wide industrial use. The paper identifies several dimensions that can serve as a basis for comparing generative languages.},
+       pages = {51--72},
+       booktitle = {Domain-Specific Program Generation: International Seminar, Dagstuhl Castle, Germany, March 23-28, 2003. Revised Papers},
        publisher = {Springer Berlin Heidelberg},
-       author = {Czarnecki, Krzysztof and O'Donnell, John T. and Striegnitz, J\"{o}rg and Taha, Walid},
+       author = {Czarnecki, Krzysztof and O'Donnell, John T. and Striegnitz, Jörg and Taha, Walid},
        editor = {Lengauer, Christian and Batory, Don and Consel, Charles and Odersky, Martin},
-       year = {2004},
+       date = {2004},
        doi = {10.1007/978-3-540-25935-0_4},
-       pages = {51--72},
        file = {Czarnecki et al. - 2004 - DSL Implementation in MetaOCaml, Template Haskell,.pdf:/home/mrl/.local/share/zotero/storage/U6E3325Q/Czarnecki et al. - 2004 - DSL Implementation in MetaOCaml, Template Haskell,.pdf:application/pdf},
 }
 
 @inproceedings{sheard_accomplishments_2001,
-       address = {Berlin, Heidelberg},
-       title = {Accomplishments and {Research} {Challenges} in {Meta}-programming},
+       location = {Berlin, Heidelberg},
+       title = {Accomplishments and Research Challenges in Meta-programming},
        isbn = {978-3-540-44806-8},
        abstract = {In the last ten years the study of meta-programming systems, as formal systems worthy of study in their own right, has vastly accelerated. In that time a lot has been accomplished, yet much remains to be done. In this invited talk I wish to review recent accomplishments and future research challenges in hopes that this will spur interest in meta-programming in general and lead to new and better meta-programming systems.},
-       booktitle = {Semantics, {Applications}, and {Implementation} of {Program} {Generation}},
+       pages = {2--44},
+       booktitle = {Semantics, Applications, and Implementation of Program Generation},
        publisher = {Springer Berlin Heidelberg},
        author = {Sheard, Tim},
        editor = {Taha, Walid},
-       year = {2001},
-       pages = {2--44},
+       date = {2001},
        file = {Sheard - 2001 - Accomplishments and Research Challenges in Meta-pr.pdf:/home/mrl/.local/share/zotero/storage/M7NT6USA/Sheard - 2001 - Accomplishments and Research Challenges in Meta-pr.pdf:application/pdf},
 }
 
 @inproceedings{kohlbecker_hygienic_1986,
-       address = {New York, NY, USA},
-       series = {{LFP} '86},
-       title = {Hygienic {Macro} {Expansion}},
+       location = {New York, {NY}, {USA}},
+       title = {Hygienic Macro Expansion},
        isbn = {0-89791-200-4},
        doi = {10.1145/319838.319859},
-       booktitle = {Proceedings of the 1986 {ACM} {Conference} on {LISP} and {Functional} {Programming}},
-       publisher = {ACM},
-       author = {Kohlbecker, Eugene and Friedman, Daniel P. and Felleisen, Matthias and Duba, Bruce},
-       year = {1986},
-       note = {event-place: Cambridge, Massachusetts, USA},
+       series = {{LFP} '86},
        pages = {151--161},
+       booktitle = {Proceedings of the 1986 {ACM} Conference on {LISP} and Functional Programming},
+       publisher = {{ACM}},
+       author = {Kohlbecker, Eugene and Friedman, Daniel P. and Felleisen, Matthias and Duba, Bruce},
+       date = {1986},
+       note = {event-place: Cambridge, Massachusetts, {USA}},
        file = {Kohlbecker et al. - 1986 - Hygienic Macro Expansion.pdf:/home/mrl/.local/share/zotero/storage/MFH642JU/Kohlbecker et al. - 1986 - Hygienic Macro Expansion.pdf:application/pdf},
 }
 
 @inproceedings{lammel_scrap_2003,
-       address = {New York, NY, USA},
-       series = {{TLDI} '03},
-       title = {Scrap {Your} {Boilerplate}: {A} {Practical} {Design} {Pattern} for {Generic} {Programming}},
+       location = {New York, {NY}, {USA}},
+       title = {Scrap Your Boilerplate: A Practical Design Pattern for Generic Programming},
        isbn = {1-58113-649-8},
        doi = {10.1145/604174.604179},
+       series = {{TLDI} '03},
        abstract = {We describe a design pattern for writing programs that traverse data structures built from rich mutually-recursive data types. Such programs often have a great deal of "boilerplate" code that simply walks the structure, hiding a small amount of "real" code that constitutes the reason for the traversal.Our technique allows most of this boilerplate to be written once and for all, or even generated mechanically, leaving the programmer free to concentrate on the important part of the algorithm. These generic programs are much more adaptive when faced with data structure evolution because they contain many fewer lines of type-specific code.Our approach is simple to understand, reasonably efficient, and it handles all the data types found in conventional functional programming languages. It makes essential use of rank-2 polymorphism, an extension found in some implementations of Haskell. Further it relies on a simple type-safe cast operator.},
-       booktitle = {Proceedings of the 2003 {ACM} {SIGPLAN} {International} {Workshop} on {Types} in {Languages} {Design} and {Implementation}},
-       publisher = {ACM},
-       author = {L\"{a}mmel, Ralf and Peyton Jones, Simon},
-       year = {2003},
-       note = {event-place: New Orleans, Louisiana, USA},
-       keywords = {generic programming, rank-2 types, traversal, type cast},
        pages = {26--37},
+       booktitle = {Proceedings of the 2003 {ACM} {SIGPLAN} International Workshop on Types in Languages Design and Implementation},
+       publisher = {{ACM}},
+       author = {Lämmel, Ralf and Peyton Jones, Simon},
+       date = {2003},
+       note = {event-place: New Orleans, Louisiana, {USA}},
+       keywords = {generic programming, rank-2 types, traversal, type cast},
+       file = {Lämmel and Jones - 2003 - Scrap Your Boilerplate A Practical Design Pattern.pdf:/home/mrl/.local/share/zotero/storage/P2PJYYY3/Lämmel and Jones - 2003 - Scrap Your Boilerplate A Practical Design Pattern.pdf:application/pdf},
 }
 
 @inproceedings{bawden_quasiquotation_1999,
-       address = {Aarhus, Denmark},
-       series = {{BRICS} {Notes} {Series}},
-       title = {Quasiquotation in {Lisp}},
-       volume = {NS-99-1},
+       location = {Aarhus, Denmark},
+       title = {Quasiquotation in Lisp},
+       volume = {{NS}-99-1},
        doi = {10.1.1.22.1290},
-       booktitle = {O. {Danvy}, {Ed}., {University} of {Aarhus}, {Dept}. of {Computer} {Science}},
-       publisher = {BRICS},
-       author = {Bawden, Alan},
-       year = {1999},
+       series = {{BRICS} Notes Series},
+       eventtitle = {{ACM} {SIGPLAN} Workshop on Partial Evaluation and Semantics-Based Program Manipulation},
        pages = {88--99},
+       booktitle = {O. Danvy, Ed., University of Aarhus, Dept. of Computer Science},
+       publisher = {{BRICS}},
+       author = {Bawden, Alan},
+       date = {1999},
        file = {Bawden - 1999 - Quasiquotation in Lisp.pdf:/home/mrl/.local/share/zotero/storage/CIFANZAW/Bawden - 1999 - Quasiquotation in Lisp.pdf:application/pdf},
 }
 
 @inproceedings{clifton-everest_embedding_2014,
-       address = {Cham},
-       title = {Embedding {Foreign} {Code}},
+       location = {Cham},
+       title = {Embedding Foreign Code},
        isbn = {978-3-319-04132-2},
-       abstract = {Special purpose embedded languages facilitate generating high-performance code from purely functional high-level code; for example, we want to program highly parallel GPUs without the usual high barrier to entry and the time-consuming development process. We previously demonstrated the feasibility of a skeleton-based, generative approach to compiling such embedded languages.},
-       booktitle = {Practical {Aspects} of {Declarative} {Languages}},
+       abstract = {Special purpose embedded languages facilitate generating high-performance code from purely functional high-level code; for example, we want to program highly parallel {GPUs} without the usual high barrier to entry and the time-consuming development process. We previously demonstrated the feasibility of a skeleton-based, generative approach to compiling such embedded languages.},
+       pages = {136--151},
+       booktitle = {Practical Aspects of Declarative Languages},
        publisher = {Springer International Publishing},
-       author = {Clifton-Everest, Robert and McDonell, Trevor L. and Chakravarty, Manuel M. T. and Keller, Gabriele},
+       author = {Clifton-Everest, Robert and {McDonell}, Trevor L. and Chakravarty, Manuel M. T. and Keller, Gabriele},
        editor = {Flatt, Matthew and Guo, Hai-Feng},
-       year = {2014},
-       pages = {136--151},
+       date = {2014},
        file = {Clifton-Everest et al. - 2014 - Embedding Foreign Code.pdf:/home/mrl/.local/share/zotero/storage/JTJGK5BX/Clifton-Everest et al. - 2014 - Embedding Foreign Code.pdf:application/pdf},
 }
 
 @inproceedings{shioda_libdsl_2014,
-       address = {New York, NY, USA},
-       series = {{GPCE} 2014},
-       title = {{LibDSL}: {A} {Library} for {Developing} {Embedded} {Domain} {Specific} {Languages} in d via {Template} {Metaprogramming}},
+       location = {New York, {NY}, {USA}},
+       title = {{LibDSL}: A Library for Developing Embedded Domain Specific Languages in d via Template Metaprogramming},
        isbn = {978-1-4503-3161-6},
        doi = {10.1145/2658761.2658770},
-       abstract = {This paper presents a library called LibDSL that helps the implementer of an embedded domain specific language (EDSL) effectively develop it in D language. The LibDSL library accepts as input some kinds of “specifications” of the EDSL that the implementer is going to develop and a D program within which an EDSL source program written by the user is embedded. It produces the front-end code of an LALR parser for the EDSL program and back-end code of the execution engine. LibDSL is able to produce two kinds of execution engines, namely compiler-based and interpreter-based engines, either of which the user can properly choose depending on whether an EDSL program is known at compile time or not. We have implemented the LibDSL system by using template metaprogramming and other advanced facilities such as compile-time function execution of D language. EDSL programs developed by means of LibDSL have a nice integrativeness with the host language.},
-       booktitle = {Proceedings of the 2014 {International} {Conference} on {Generative} {Programming}: {Concepts} and {Experiences}},
-       publisher = {ACM},
-       author = {Shioda, Masato and Iwasaki, Hideya and Sato, Shigeyuki},
-       year = {2014},
-       note = {event-place: V\"{a}ster\r{a}s, Sweden},
-       keywords = {D language, Embedded domain specific languages, Library, Metaprogramming},
+       series = {{GPCE} 2014},
+       abstract = {This paper presents a library called {LibDSL} that helps the implementer of an embedded domain specific language ({EDSL}) effectively develop it in D language. The {LibDSL} library accepts as input some kinds of “specifications” of the {EDSL} that the implementer is going to develop and a D program within which an {EDSL} source program written by the user is embedded. It produces the front-end code of an {LALR} parser for the {EDSL} program and back-end code of the execution engine. {LibDSL} is able to produce two kinds of execution engines, namely compiler-based and interpreter-based engines, either of which the user can properly choose depending on whether an {EDSL} program is known at compile time or not. We have implemented the {LibDSL} system by using template metaprogramming and other advanced facilities such as compile-time function execution of D language. {EDSL} programs developed by means of {LibDSL} have a nice integrativeness with the host language.},
        pages = {63--72},
+       booktitle = {Proceedings of the 2014 International Conference on Generative Programming: Concepts and Experiences},
+       publisher = {{ACM}},
+       author = {Shioda, Masato and Iwasaki, Hideya and Sato, Shigeyuki},
+       date = {2014},
+       note = {event-place: Västerås, Sweden},
+       keywords = {Metaprogramming, D language, Embedded domain specific languages, Library},
        file = {Shioda et al. - 2014 - LibDSL A Library for Developing Embedded Domain S.pdf:/home/mrl/.local/share/zotero/storage/3WFYJPFR/Shioda et al. - 2014 - LibDSL A Library for Developing Embedded Domain S.pdf:application/pdf},
 }
 
 @inproceedings{duregard_embedded_2011,
-       address = {New York, NY, USA},
-       series = {Haskell '11},
-       title = {Embedded {Parser} {Generators}},
+       location = {New York, {NY}, {USA}},
+       title = {Embedded Parser Generators},
        isbn = {978-1-4503-0860-1},
        doi = {10.1145/2034675.2034689},
-       abstract = {We present a novel method of embedding context-free grammars in Haskell, and to automatically generate parsers and pretty-printers from them. We have implemented this method in a library called BNFC-meta (from the BNF Converter, which it is built on). The library builds compiler front ends using metaprogramming instead of conventional code generation. Parsers are built from labelled BNF grammars that are defined directly in Haskell modules. Our solution combines features of parser generators (static grammar checks, a highly specialised grammar DSL) and adds several features that are otherwise exclusive to combinatory libraries such as the ability to reuse, parameterise and generate grammars inside Haskell.To allow writing grammars in concrete syntax, BNFC-meta provides a quasi-quoter that can parse grammars (embedded in Haskell files) at compile time and use metaprogramming to replace them with their abstract syntax. We also generate quasi-quoters so that the languages we define with BNFC-meta can be embedded in the same way. With a minimal change to the grammar, we support adding anti-quotation to the generated quasi-quoters, which allows users of the defined language to mix concrete and abstract syntax almost seamlessly. Unlike previous methods of achieving anti-quotation, the method used by BNFC-meta is simple, efficient and avoids polluting the abstract syntax types.},
-       booktitle = {Proceedings of the 4th {ACM} {Symposium} on {Haskell}},
-       publisher = {ACM},
-       author = {Dureg\r{a}rd, Jonas and Jansson, Patrik},
-       year = {2011},
+       series = {Haskell '11},
+       abstract = {We present a novel method of embedding context-free grammars in Haskell, and to automatically generate parsers and pretty-printers from them. We have implemented this method in a library called {BNFC}-meta (from the {BNF} Converter, which it is built on). The library builds compiler front ends using metaprogramming instead of conventional code generation. Parsers are built from labelled {BNF} grammars that are defined directly in Haskell modules. Our solution combines features of parser generators (static grammar checks, a highly specialised grammar {DSL}) and adds several features that are otherwise exclusive to combinatory libraries such as the ability to reuse, parameterise and generate grammars inside Haskell.To allow writing grammars in concrete syntax, {BNFC}-meta provides a quasi-quoter that can parse grammars (embedded in Haskell files) at compile time and use metaprogramming to replace them with their abstract syntax. We also generate quasi-quoters so that the languages we define with {BNFC}-meta can be embedded in the same way. With a minimal change to the grammar, we support adding anti-quotation to the generated quasi-quoters, which allows users of the defined language to mix concrete and abstract syntax almost seamlessly. Unlike previous methods of achieving anti-quotation, the method used by {BNFC}-meta is simple, efficient and avoids polluting the abstract syntax types.},
+       pages = {107--117},
+       booktitle = {Proceedings of the 4th {ACM} Symposium on Haskell},
+       publisher = {{ACM}},
+       author = {Duregård, Jonas and Jansson, Patrik},
+       date = {2011},
        note = {event-place: Tokyo, Japan},
        keywords = {domain specific languages, metaprogramming},
-       pages = {107--117},
+       file = {Duregård and Jansson - 2011 - Embedded Parser Generators.pdf:/home/mrl/.local/share/zotero/storage/H5A8TPWV/Duregård and Jansson - 2011 - Embedded Parser Generators.pdf:application/pdf},
 }
 
 @inproceedings{eisenberg_promoting_2014,
-       address = {New York, NY, USA},
-       series = {Haskell '14},
-       title = {Promoting {Functions} to {Type} {Families} in {Haskell}},
+       location = {New York, {NY}, {USA}},
+       title = {Promoting Functions to Type Families in Haskell},
        isbn = {978-1-4503-3041-1},
        doi = {10.1145/2633357.2633361},
-       abstract = {Haskell, as implemented in the Glasgow Haskell Compiler (GHC), is enriched with many extensions that support type-level programming, such as promoted datatypes, kind polymorphism, and type families. Yet, the expressiveness of the type-level language remains limited. It is missing many features present at the term level, including case expressions, anonymous functions, partially-applied functions, and let expressions. In this paper, we present an algorithm - with a proof of correctness - to encode these term-level constructs at the type level. Our approach is automated and capable of promoting a wide array of functions to type families. We also highlight and discuss those term-level features that are not promotable. In so doing, we offer a critique on GHC's existing type system, showing what it is already capable of and where it may want improvement.We believe that delineating the mismatch between GHC's term level and its type level is a key step toward supporting dependently typed programming.},
-       booktitle = {Proceedings of the 2014 {ACM} {SIGPLAN} {Symposium} on {Haskell}},
-       publisher = {ACM},
+       series = {Haskell '14},
+       abstract = {Haskell, as implemented in the Glasgow Haskell Compiler ({GHC}), is enriched with many extensions that support type-level programming, such as promoted datatypes, kind polymorphism, and type families. Yet, the expressiveness of the type-level language remains limited. It is missing many features present at the term level, including case expressions, anonymous functions, partially-applied functions, and let expressions. In this paper, we present an algorithm - with a proof of correctness - to encode these term-level constructs at the type level. Our approach is automated and capable of promoting a wide array of functions to type families. We also highlight and discuss those term-level features that are not promotable. In so doing, we offer a critique on {GHC}'s existing type system, showing what it is already capable of and where it may want improvement.We believe that delineating the mismatch between {GHC}'s term level and its type level is a key step toward supporting dependently typed programming.},
+       pages = {95--106},
+       booktitle = {Proceedings of the 2014 {ACM} {SIGPLAN} Symposium on Haskell},
+       publisher = {{ACM}},
        author = {Eisenberg, Richard A. and Stolarek, Jan},
-       year = {2014},
+       date = {2014},
        note = {event-place: Gothenburg, Sweden},
-       keywords = {defunctionalization, Haskell, type-level programming},
-       pages = {95--106},
+       keywords = {Haskell, defunctionalization, type-level programming},
        file = {Eisenberg and Stolarek - 2014 - Promoting Functions to Type Families in Haskell.pdf:/home/mrl/.local/share/zotero/storage/PQXGBM6M/Eisenberg and Stolarek - 2014 - Promoting Functions to Type Families in Haskell.pdf:application/pdf},
 }
 
 @inproceedings{viera_staged_2018,
-       address = {New York, NY, USA},
-       series = {{IFL} 2018},
-       title = {A {Staged} {Embedding} of {Attribute} {Grammars} in {Haskell}},
+       location = {New York, {NY}, {USA}},
+       title = {A Staged Embedding of Attribute Grammars in Haskell},
        isbn = {978-1-4503-7143-8},
        doi = {10.1145/3310232.3310235},
-       abstract = {In this paper, we present an embedding of attribute grammars in Haskell, that is both modular and type-safe, while providing the user with domain specific error messages.Our approach involves to delay part of the safety checks to runtime. When a grammar is correct, we are able to extract a function that can be run without expecting any runtime error related to the EDSL.},
-       booktitle = {Proceedings of the 30th {Symposium} on {Implementation} and {Application} of {Functional} {Languages}},
-       publisher = {ACM},
-       author = {Viera, Marcos and Balestrieri, Florent and Pardo, Alberto},
-       year = {2018},
-       note = {event-place: Lowell, MA, USA},
-       keywords = {Attribute Grammars, Dynamics, EDSL, Haskell, Staging},
+       series = {{IFL} 2018},
+       abstract = {In this paper, we present an embedding of attribute grammars in Haskell, that is both modular and type-safe, while providing the user with domain specific error messages.Our approach involves to delay part of the safety checks to runtime. When a grammar is correct, we are able to extract a function that can be run without expecting any runtime error related to the {EDSL}.},
        pages = {95--106},
+       booktitle = {Proceedings of the 30th Symposium on Implementation and Application of Functional Languages},
+       publisher = {{ACM}},
+       author = {Viera, Marcos and Balestrieri, Florent and Pardo, Alberto},
+       date = {2018},
+       note = {event-place: Lowell, {MA}, {USA}},
+       keywords = {Haskell, {EDSL}, Attribute Grammars, Dynamics, Staging},
        file = {Viera et al. - 2018 - A Staged Embedding of Attribute Grammars in Haskel.pdf:/home/mrl/.local/share/zotero/storage/53D4HT9C/Viera et al. - 2018 - A Staged Embedding of Attribute Grammars in Haskel.pdf:application/pdf},
 }
 
@@ -1163,609 +1171,609 @@ Publisher: ACM},
        title = {Type classes with existential types},
        volume = {6},
        doi = {10.1017/S0956796800001817},
+       pages = {485--518},
        number = {3},
-       journal = {Journal of Functional Programming},
-       author = {L\"{a}ufer, Konstantin},
-       year = {1996},
+       journaltitle = {Journal of Functional Programming},
+       author = {Läufer, Konstantin},
+       date = {1996},
        note = {Publisher: Cambridge University Press},
-       pages = {485--518},
+       file = {Läufer - 1996 - Type classes with existential types.pdf:/home/mrl/.local/share/zotero/storage/FG73PZJE/Läufer - 1996 - Type classes with existential types.pdf:application/pdf},
 }
 
 @incollection{hinze_fun_2003,
-       address = {Palgrave},
-       series = {Cornerstones of {Computing}},
-       title = {Fun {With} {Phantom} {Types}},
+       location = {Palgrave},
+       title = {Fun With Phantom Types},
        isbn = {978-0-333-99285-2},
-       booktitle = {The {Fun} of {Programming}},
+       series = {Cornerstones of Computing},
+       pages = {245--262},
+       booktitle = {The Fun of Programming},
        publisher = {Bloomsbury Publishing},
        author = {Hinze, Ralf},
        editor = {Gibbons, Jeremy and de Moor, Oege},
-       year = {2003},
-       pages = {245--262},
+       date = {2003},
 }
 
 @inproceedings{boulton_experience_1992,
-       address = {North-Holland},
+       location = {North-Holland},
        title = {Experience with embedding hardware description languages in {HOL}},
        volume = {10},
        isbn = {0-444-89686-4},
-       abstract = {The semantics of hardware description languages can be represented in higher order logic. This provides a formal de nition that is suitable for machine processing. Experiments are in progress at Cambridge to see whether this method can be the basis of practical tools based on the HOL theorem-proving assistant. Three languages are being investigated: ELLA, Silage and VHDL. The approaches taken for these languages are compared and current progress on building semantically-based theorem-proving tools is discussed.},
-       language = {en},
-       booktitle = {{IFIP} {TC10}/{WG}},
+       abstract = {The semantics of hardware description languages can be represented in higher order logic. This provides a formal de nition that is suitable for machine processing. Experiments are in progress at Cambridge to see whether this method can be the basis of practical tools based on the {HOL} theorem-proving assistant. Three languages are being investigated: {ELLA}, Silage and {VHDL}. The approaches taken for these languages are compared and current progress on building semantically-based theorem-proving tools is discussed.},
+       eventtitle = {Proceedings of the {IFIP} {TC}10/{WG} 10.2 International Conference on Theorem Provers in Circuit Design: Theory, Practice and Experience},
+       pages = {129--156},
+       booktitle = {{IFIP} {TC}10/{WG}},
        publisher = {Elsevier},
        author = {Boulton, Richard and Gordon, Andrew and Gordon, Mike and Harrison, John and Herbert, John and Tassel, John Van},
        editor = {Stavridou, Victoria and Melham, Thomas F. and Boute, Raymond T.},
-       year = {1992},
-       note = {event-place: Nijmegen, NL},
-       pages = {129--156},
+       date = {1992},
+       langid = {english},
+       note = {event-place: Nijmegen, {NL}},
        file = {Boulton et al. - Experience with embedding hardware description lan.pdf:/home/mrl/.local/share/zotero/storage/USAAA6WM/Boulton et al. - Experience with embedding hardware description lan.pdf:application/pdf},
 }
 
 @inproceedings{terei_safe_2012,
-       address = {New York, NY, USA},
-       series = {Haskell '12},
-       title = {Safe {Haskell}},
+       location = {New York, {NY}, {USA}},
+       title = {Safe Haskell},
        isbn = {978-1-4503-1574-6},
        doi = {10.1145/2364506.2364524},
-       abstract = {Though Haskell is predominantly type-safe, implementations contain a few loopholes through which code can bypass typing and module encapsulation. This paper presents Safe Haskell, a language extension that closes these loopholes. Safe Haskell makes it possible to confine and safely execute untrusted, possibly malicious code. By strictly enforcing types, Safe Haskell allows a variety of different policies from API sandboxing to information-flow control to be implemented easily as monads. Safe Haskell is aimed to be as unobtrusive as possible. It enforces properties that programmers tend to meet already by convention. We describe the design of Safe Haskell and an implementation (currently shipping with GHC) that infers safety for code that lies in a safe subset of the language. We use Safe Haskell to implement an online Haskell interpreter that can securely execute arbitrary untrusted code with no overhead. The use of Safe Haskell greatly simplifies this task and allows the use of a large body of existing code and tools.},
-       booktitle = {Proceedings of the 2012 {Haskell} {Symposium}},
-       publisher = {ACM},
+       series = {Haskell '12},
+       abstract = {Though Haskell is predominantly type-safe, implementations contain a few loopholes through which code can bypass typing and module encapsulation. This paper presents Safe Haskell, a language extension that closes these loopholes. Safe Haskell makes it possible to confine and safely execute untrusted, possibly malicious code. By strictly enforcing types, Safe Haskell allows a variety of different policies from {API} sandboxing to information-flow control to be implemented easily as monads. Safe Haskell is aimed to be as unobtrusive as possible. It enforces properties that programmers tend to meet already by convention. We describe the design of Safe Haskell and an implementation (currently shipping with {GHC}) that infers safety for code that lies in a safe subset of the language. We use Safe Haskell to implement an online Haskell interpreter that can securely execute arbitrary untrusted code with no overhead. The use of Safe Haskell greatly simplifies this task and allows the use of a large body of existing code and tools.},
+       pages = {137--148},
+       booktitle = {Proceedings of the 2012 Haskell Symposium},
+       publisher = {{ACM}},
        author = {Terei, David and Marlow, Simon and Peyton Jones, Simon and Mazières, David},
-       year = {2012},
+       date = {2012},
        note = {event-place: Copenhagen, Denmark},
        keywords = {haskell, security, type safety},
-       pages = {137--148},
        file = {2364506.2364524.pdf:/home/mrl/.local/share/zotero/storage/5SMB272R/2364506.2364524.pdf:application/pdf},
 }
 
-@techreport{leijen_parsec_2001,
-       address = {Utrecht},
-       title = {Parsec: {Direct} {Style} {Monadic} {Parser} {Combinators} {For} {The} {Real} {World}},
-       language = {en},
-       number = {UU-CS-2001-27},
+@report{leijen_parsec_2001,
+       location = {Utrecht},
+       title = {Parsec: Direct Style Monadic Parser Combinators For The Real World},
+       pages = {22},
+       number = {{UU}-{CS}-2001-27},
        institution = {Universiteit Utrecht},
        author = {Leijen, Daan and Meijer, Erik},
-       year = {2001},
-       pages = {22},
+       date = {2001},
+       langid = {english},
        file = {Leijen - Parsec Direct Style Monadic Parser Combinators Fo.pdf:/home/mrl/.local/share/zotero/storage/J78G3FZ2/Leijen - Parsec Direct Style Monadic Parser Combinators Fo.pdf:application/pdf},
 }
 
 @inproceedings{gibbons_folding_2014,
-       address = {New York, NY, USA},
-       series = {{ICFP} '14},
-       title = {Folding {Domain}-{Specific} {Languages}: {Deep} and {Shallow} {Embeddings} ({Functional} {Pearl})},
+       location = {New York, {NY}, {USA}},
+       title = {Folding Domain-Specific Languages: Deep and Shallow Embeddings (Functional Pearl)},
        isbn = {978-1-4503-2873-9},
        doi = {10.1145/2628136.2628138},
+       series = {{ICFP} '14},
        abstract = {A domain-specific language can be implemented by embedding within a general-purpose host language. This embedding may be deep or shallow, depending on whether terms in the language construct syntactic or semantic representations. The deep and shallow styles are closely related, and intimately connected to folds; in this paper, we explore that connection.},
-       booktitle = {Proceedings of the 19th {ACM} {SIGPLAN} {International} {Conference} on {Functional} {Programming}},
-       publisher = {ACM},
+       pages = {339--347},
+       booktitle = {Proceedings of the 19th {ACM} {SIGPLAN} International Conference on Functional Programming},
+       publisher = {{ACM}},
        author = {Gibbons, Jeremy and Wu, Nicolas},
-       year = {2014},
+       date = {2014},
        note = {event-place: Gothenburg, Sweden},
-       keywords = {deep and shallow embedding, domain-specific languages, folds},
-       pages = {339--347},
+       keywords = {domain-specific languages, deep and shallow embedding, folds},
        file = {Gibbons and Wu - 2014 - Folding Domain-Specific Languages Deep and Shallo.pdf:/home/mrl/.local/share/zotero/storage/6WNWSLFJ/Gibbons and Wu - 2014 - Folding Domain-Specific Languages Deep and Shallo.pdf:application/pdf},
 }
 
 @inproceedings{oliveira_typecase_2005,
-       address = {New York, NY, USA},
-       series = {Haskell '05},
-       title = {{TypeCase}: {A} {Design} {Pattern} for {Type}-{Indexed} {Functions}},
+       location = {New York, {NY}, {USA}},
+       title = {{TypeCase}: A Design Pattern for Type-Indexed Functions},
        isbn = {1-59593-071-X},
        doi = {10.1145/1088348.1088358},
-       abstract = {A type-indexed function is a function that is defined for each member of some family of types. Haskell's type class mechanism provides collections of open type-indexed functions, in which the indexing family can be extended by defining a new type class instance but the collection of functions is fixed. The purpose of this paper is to present TypeCase: a design pattern that allows the definition of closed type-indexed functions, in which the index family is fixed but the collection of functions is extensible. It is inspired by Cheney and Hinze's work on lightweight approaches to generic programming. We generalise their techniques as a design pattern. Furthermore, we show that type-indexed functions with type-indexed types, and consequently generic functions with generic types, can also be encoded in a lightweight manner, thereby overcoming one of the main limitations of the lightweight approaches.},
-       booktitle = {Proceedings of the 2005 {ACM} {SIGPLAN} {Workshop} on {Haskell}},
-       publisher = {ACM},
+       series = {Haskell '05},
+       abstract = {A type-indexed function is a function that is defined for each member of some family of types. Haskell's type class mechanism provides collections of open type-indexed functions, in which the indexing family can be extended by defining a new type class instance but the collection of functions is fixed. The purpose of this paper is to present {TypeCase}: a design pattern that allows the definition of closed type-indexed functions, in which the index family is fixed but the collection of functions is extensible. It is inspired by Cheney and Hinze's work on lightweight approaches to generic programming. We generalise their techniques as a design pattern. Furthermore, we show that type-indexed functions with type-indexed types, and consequently generic functions with generic types, can also be encoded in a lightweight manner, thereby overcoming one of the main limitations of the lightweight approaches.},
+       pages = {98--109},
+       booktitle = {Proceedings of the 2005 {ACM} {SIGPLAN} Workshop on Haskell},
+       publisher = {{ACM}},
        author = {Oliveira, Bruno C. d. S. and Gibbons, Jeremy},
-       year = {2005},
+       date = {2005},
        note = {event-place: Tallinn, Estonia},
        keywords = {generic programming, type classes, type-indexed functions},
-       pages = {98--109},
        file = {Oliveira and Gibbons - 2005 - TypeCase A Design Pattern for Type-Indexed Functi.pdf:/home/mrl/.local/share/zotero/storage/RBKEZKHN/Oliveira and Gibbons - 2005 - TypeCase A Design Pattern for Type-Indexed Functi.pdf:application/pdf},
 }
 
 @inproceedings{odersky_putting_1996,
-       address = {New York, NY, USA},
-       series = {{POPL} '96},
-       title = {Putting {Type} {Annotations} to {Work}},
+       location = {New York, {NY}, {USA}},
+       title = {Putting Type Annotations to Work},
        isbn = {0-89791-769-3},
        doi = {10.1145/237721.237729},
+       series = {{POPL} '96},
        abstract = {We study an extension of the Hindley/Milner system with explicit type scheme annotations and type declarations. The system can express polymorphic function arguments, user-defined data types with abstract components, and structure types with polymorphic fields. More generally, all programs of the polymorphic lambda calculus can be encoded by a translation between typing derivations. We show that type reconstruction in this system can be reduced to the decidable problem of first-order unification under a mixed prefix.},
-       booktitle = {Proceedings of the 23rd {ACM} {SIGPLAN}-{SIGACT} {Symposium} on {Principles} of {Programming} {Languages}},
-       publisher = {ACM},
-       author = {Odersky, Martin and L\"{a}ufer, Konstantin},
-       year = {1996},
-       note = {event-place: St. Petersburg Beach, Florida, USA},
        pages = {54--67},
+       booktitle = {Proceedings of the 23rd {ACM} {SIGPLAN}-{SIGACT} Symposium on Principles of Programming Languages},
+       publisher = {{ACM}},
+       author = {Odersky, Martin and Läufer, Konstantin},
+       date = {1996},
+       note = {event-place: St. Petersburg Beach, Florida, {USA}},
+       file = {Odersky and Läufer - 1996 - Putting Type Annotations to Work.pdf:/home/mrl/.local/share/zotero/storage/WC37TU5H/Odersky and Läufer - 1996 - Putting Type Annotations to Work.pdf:application/pdf},
 }
 
 @inproceedings{najd_everything_2016,
-       address = {New York, NY, USA},
-       series = {{PEPM} '16},
-       title = {Everything {Old} is {New} {Again}: {Quoted} {Domain}-{Specific} {Languages}},
+       location = {New York, {NY}, {USA}},
+       title = {Everything Old is New Again: Quoted Domain-Specific Languages},
        isbn = {978-1-4503-4097-7},
        doi = {10.1145/2847538.2847541},
-       abstract = {We describe a new approach to implementing Domain-Specific Languages(DSLs), called Quoted DSLs (QDSLs), that is inspired by two old ideas:quasi-quotation, from McCarthy's Lisp of 1960, and the subformula principle of normal proofs, from Gentzen's natural deduction of 1935. QDSLs reuse facilities provided for the host language, since host and quoted terms share the same syntax, type system, and normalisation rules. QDSL terms are normalised to a canonical form, inspired by the subformula principle, which guarantees that one can use higher-order types in the source while guaranteeing first-order types in the target, and enables using types to guide fusion. We test our ideas by re-implementing Feldspar, which was originally implemented as an Embedded DSL (EDSL), as a QDSL; and we compare the QDSL and EDSL variants. The two variants produce identical code.},
-       booktitle = {Proceedings of the 2016 {ACM} {SIGPLAN} {Workshop} on {Partial} {Evaluation} and {Program} {Manipulation}},
-       publisher = {ACM},
-       author = {Najd, Shayan and Lindley, Sam and Svenningsson, Josef and Wadler, Philip},
-       year = {2016},
-       note = {event-place: St. Petersburg, FL, USA},
-       keywords = {domain-specific language, DSL, EDSL, embedded language, normalisation, QDSL, quotation, subformula principle},
+       series = {{PEPM} '16},
+       abstract = {We describe a new approach to implementing Domain-Specific Languages({DSLs}), called Quoted {DSLs} ({QDSLs}), that is inspired by two old ideas:quasi-quotation, from {McCarthy}'s Lisp of 1960, and the subformula principle of normal proofs, from Gentzen's natural deduction of 1935. {QDSLs} reuse facilities provided for the host language, since host and quoted terms share the same syntax, type system, and normalisation rules. {QDSL} terms are normalised to a canonical form, inspired by the subformula principle, which guarantees that one can use higher-order types in the source while guaranteeing first-order types in the target, and enables using types to guide fusion. We test our ideas by re-implementing Feldspar, which was originally implemented as an Embedded {DSL} ({EDSL}), as a {QDSL}; and we compare the {QDSL} and {EDSL} variants. The two variants produce identical code.},
        pages = {25--36},
+       booktitle = {Proceedings of the 2016 {ACM} {SIGPLAN} Workshop on Partial Evaluation and Program Manipulation},
+       publisher = {{ACM}},
+       author = {Najd, Shayan and Lindley, Sam and Svenningsson, Josef and Wadler, Philip},
+       date = {2016},
+       note = {event-place: St. Petersburg, {FL}, {USA}},
+       keywords = {{EDSL}, domain-specific language, {DSL}, embedded language, normalisation, {QDSL}, quotation, subformula principle},
        file = {Najd et al. - 2016 - Everything Old is New Again Quoted Domain-Specifi.pdf:/home/mrl/.local/share/zotero/storage/NZJW5ZVF/Najd et al. - 2016 - Everything Old is New Again Quoted Domain-Specifi.pdf:application/pdf},
 }
 
 @article{carette_finally_2009,
-       title = {Finally tagless, partially evaluated: {Tagless} staged interpreters for simpler typed languages},
+       title = {Finally tagless, partially evaluated: Tagless staged interpreters for simpler typed languages},
        volume = {19},
        doi = {10.1017/S0956796809007205},
+       pages = {509--543},
        number = {5},
-       journal = {Journal of Functional Programming},
+       journaltitle = {Journal of Functional Programming},
        author = {Carette, Jacques and Kiselyov, Oleg and Shan, Chung-Chieh},
-       year = {2009},
+       date = {2009},
        note = {Publisher: Cambridge University Press},
-       pages = {509--543},
        file = {CARETTE et al. - 2009 - Finally tagless, partially evaluated Tagless stag.pdf:/home/mrl/.local/share/zotero/storage/T8C8VMHP/CARETTE et al. - 2009 - Finally tagless, partially evaluated Tagless stag.pdf:application/pdf},
 }
 
 @inproceedings{leijen_domain_2000,
-       address = {New York, NY, USA},
-       series = {{DSL} '99},
-       title = {Domain {Specific} {Embedded} {Compilers}},
+       location = {New York, {NY}, {USA}},
+       title = {Domain Specific Embedded Compilers},
        isbn = {1-58113-255-7},
        doi = {10.1145/331960.331977},
-       abstract = {Domain-specific embedded languages (DSELs) expressed in higher-order, typed (HOT) languages provide a composable framework for domain-specific abstractions. Such a framework is of greater utility than a collection of stand-alone domain-specific languages. Usually, embedded domain specific languages are build on top of a set of domain specific primitive functions that are ultimately implemented using some form of foreign function call. We sketch a general design pattern/or embedding client-server style services into Haskell using a domain specific embedded compiler for the server's source language. In particular we apply this idea to implement Haskell/DB, a domain specific embdedded compiler that dynamically generates of SQL queries from monad comprehensions, which are then executed on an arbitrary ODBC database server.},
-       booktitle = {Proceedings of the 2nd {Conference} on {Domain}-{Specific} {Languages}},
-       publisher = {ACM},
-       author = {Leijen, Daan and Meijer, Erik},
-       year = {2000},
-       note = {event-place: Austin, Texas, USA},
+       series = {{DSL} '99},
+       abstract = {Domain-specific embedded languages ({DSELs}) expressed in higher-order, typed ({HOT}) languages provide a composable framework for domain-specific abstractions. Such a framework is of greater utility than a collection of stand-alone domain-specific languages. Usually, embedded domain specific languages are build on top of a set of domain specific primitive functions that are ultimately implemented using some form of foreign function call. We sketch a general design pattern/or embedding client-server style services into Haskell using a domain specific embedded compiler for the server's source language. In particular we apply this idea to implement Haskell/{DB}, a domain specific embdedded compiler that dynamically generates of {SQL} queries from monad comprehensions, which are then executed on an arbitrary {ODBC} database server.},
        pages = {109--122},
+       booktitle = {Proceedings of the 2nd Conference on Domain-Specific Languages},
+       publisher = {{ACM}},
+       author = {Leijen, Daan and Meijer, Erik},
+       date = {2000},
+       note = {event-place: Austin, Texas, {USA}},
        file = {Leijen and Meijer - 2000 - Domain Specific Embedded Compilers.pdf:/home/mrl/.local/share/zotero/storage/YHPF2VZ6/Leijen and Meijer - 2000 - Domain Specific Embedded Compilers.pdf:application/pdf},
 }
 
-@techreport{plasmeijer_clean_2021,
-       address = {Nijmegen},
-       title = {Clean {Language} {Report} version 3.1},
-       urldate = {2021-12-22},
-       institution = {Institute for Computing and Information Sciences},
-       author = {Plasmeijer, Rinus and \noopsort{Eekelen}{van Eekelen}, Marko and \noopsort{Groningen}{van Groningen}, John},
-       month = dec,
-       year = {2021},
+@report{plasmeijer_clean_2021,
+       location = {Nijmegen},
+       title = {Clean Language Report version 3.1},
        pages = {127},
+       institution = {Institute for Computing and Information Sciences},
+       author = {Plasmeijer, Rinus and van Eekelen, Marko and van Groningen, John},
+       urldate = {2021-12-22},
+       date = {2021-12-22},
        file = {CleanLanguageReport.pdf:/home/mrl/.local/share/zotero/storage/I2SDRIH6/CleanLanguageReport.pdf:application/pdf},
 }
 
 @incollection{kiselyov_typed_2012,
-       address = {Berlin, Heidelberg},
-       title = {Typed {Tagless} {Final} {Interpreters}},
+       location = {Berlin, Heidelberg},
+       title = {Typed Tagless Final Interpreters},
        isbn = {978-3-642-32202-0},
        abstract = {The so-called `typed tagless final' approach of [6] has collected and polished a number of techniques for representing typed higher-order languages in a typed metalanguage, along with type-preserving interpretation, compilation and partial evaluation. The approach is an alternative to the traditional, or `initial' encoding of an object language as a (generalized) algebraic data type. Both approaches permit multiple interpretations of an expression, to evaluate it, pretty-print, etc. The final encoding represents all and only typed object terms without resorting to generalized algebraic data types, dependent or other fancy types. The final encoding lets us add new language forms and interpretations without breaking the existing terms and interpreters.},
-       booktitle = {Generic and {Indexed} {Programming}: {International} {Spring} {School}, {SSGIP} 2010, {Oxford}, {UK}, {March} 22-26, 2010, {Revised} {Lectures}},
+       pages = {130--174},
+       booktitle = {Generic and Indexed Programming: International Spring School, {SSGIP} 2010, Oxford, {UK}, March 22-26, 2010, Revised Lectures},
        publisher = {Springer Berlin Heidelberg},
        author = {Kiselyov, Oleg},
        editor = {Gibbons, Jeremy},
-       year = {2012},
+       date = {2012},
        doi = {10.1007/978-3-642-32202-0_3},
-       pages = {130--174},
        file = {Kiselyov - 2012 - Typed Tagless Final Interpreters.pdf:/home/mrl/.local/share/zotero/storage/9NBYZLRP/Kiselyov - 2012 - Typed Tagless Final Interpreters.pdf:application/pdf},
 }
 
 @inproceedings{nocker_concurrent_1991,
-       address = {Berlin, Heidelberg},
+       location = {Berlin, Heidelberg},
        title = {Concurrent clean},
        isbn = {978-3-540-47472-2},
        abstract = {Concurrent Clean is an experimental, lazy, higher-order parallel functional programming language based on term graph rewriting. An important difference with other languages is that in Clean graphs are manipulated and not terms. This can be used by the programmer to control communication and sharing of computation. Cyclic structures can be defined. Concurrent Clean furthermore allows to control the (parallel) order of evaluation to make efficient evaluation possible. With help of sequential annotations the default lazy evaluation can be locally changed into eager evaluation. The language enables the definition of partially strict data structures which make a whole new class of algorithms feasible in a functional language. A powerful and fast strictness analyser is incorporated in the system. The quality of the code generated by the Clean compiler has been greatly improved such that it is one of the best code generators for a lazy functional language. Two very powerful parallel annotations enable the programmer to define concurrent functional programs with arbitrary process topologies. Concurrent Clean is set up in such a way that the efficiency achieved for the sequential case can largely be maintained for a parallel implementation on loosely coupled parallel machine architectures.},
-       booktitle = {{PARLE} '91 {Parallel} {Architectures} and {Languages} {Europe}},
+       pages = {202--219},
+       booktitle = {{PARLE} '91 Parallel Architectures and Languages Europe},
        publisher = {Springer Berlin Heidelberg},
-       author = {N\"{o}cker, E. G. J. M. H. and Smetsers, J. E. W. and \noopsort{Eekelen}{van Eekelen}, M. C. J. D. and Plasmeijer, M. J.},
+       author = {Nöcker, E. G. J. M. H. and Smetsers, J. E. W. and van Eekelen, M. C. J. D. and Plasmeijer, M. J.},
        editor = {Aarts, Emile H. L. and van Leeuwen, Jan and Rem, Martin},
-       year = {1991},
-       pages = {202--219},
+       date = {1991},
+       file = {Nöcker et al. - 1991 - Concurrent clean.pdf:/home/mrl/.local/share/zotero/storage/XHTNR7BR/Nöcker et al. - 1991 - Concurrent clean.pdf:application/pdf},
 }
 
 @inproceedings{staps_lazy_2019,
-       address = {New York, NY, USA},
-       series = {{IFL} '19},
-       title = {Lazy {Interworking} of {Compiled} and {Interpreted} {Code} for {Sandboxing} and {Distributed} {Systems}},
+       location = {New York, {NY}, {USA}},
+       title = {Lazy Interworking of Compiled and Interpreted Code for Sandboxing and Distributed Systems},
        isbn = {978-1-4503-7562-7},
        doi = {10.1145/3412932.3412941},
-       abstract = {More and more applications rely on the safe execution of code unknown at compile-time, for example in the implementation of web browsers and plugin systems. Furthermore, these applications usually require some form of communication between the added code and its embedder, and hence a communication channel must be set up in which values are serialized and deserialized. This paper shows that in a functional programming language we can solve these two problems at once, if we realize that the execution of extra code is nothing more than the deserialization of a value which happens to be a function. To demonstrate this, we describe the implementation of a serialization library for the language Clean, which internally uses an interpreter to evaluate added code in a separate, sandboxed environment. Remarkable is that despite the conceptual asymmetry between "host" and "interpreter", lazy interworking must be implemented in a highly symmetric fashion, much akin to distributed systems. The library interworks on a low level with the native Clean program, but has been implemented without any changes to the native runtime system. It can therefore easily be ported to other programming languages.We can use the same technique in the context of the web, where we want to be able to share possibly lazy values between a server and a client. In this case the interpreter runs in WebAssembly in the browser and communicates seamlessly with the server, written in Clean. We use this in the iTasks web framework to handle communication and offload computations to the client to reduce stress on the server-side. Previously, this framework cross-compiled the Clean source code to JavaScript and used JSON for communication. The interpreter has a more predictable and better performance, and integration is much simpler because it interworks on a lower level with the web server.},
-       booktitle = {Proceedings of the 31st {Symposium} on {Implementation} and {Application} of {Functional} {Languages}},
-       publisher = {ACM},
-       author = {Staps, Camil and \noopsort{Groningen}{van Groningen}, John and Plasmeijer, Rinus},
-       year = {2019},
+       series = {{IFL} '19},
+       abstract = {More and more applications rely on the safe execution of code unknown at compile-time, for example in the implementation of web browsers and plugin systems. Furthermore, these applications usually require some form of communication between the added code and its embedder, and hence a communication channel must be set up in which values are serialized and deserialized. This paper shows that in a functional programming language we can solve these two problems at once, if we realize that the execution of extra code is nothing more than the deserialization of a value which happens to be a function. To demonstrate this, we describe the implementation of a serialization library for the language Clean, which internally uses an interpreter to evaluate added code in a separate, sandboxed environment. Remarkable is that despite the conceptual asymmetry between "host" and "interpreter", lazy interworking must be implemented in a highly symmetric fashion, much akin to distributed systems. The library interworks on a low level with the native Clean program, but has been implemented without any changes to the native runtime system. It can therefore easily be ported to other programming languages.We can use the same technique in the context of the web, where we want to be able to share possibly lazy values between a server and a client. In this case the interpreter runs in {WebAssembly} in the browser and communicates seamlessly with the server, written in Clean. We use this in the {iTasks} web framework to handle communication and offload computations to the client to reduce stress on the server-side. Previously, this framework cross-compiled the Clean source code to {JavaScript} and used {JSON} for communication. The interpreter has a more predictable and better performance, and integration is much simpler because it interworks on a lower level with the web server.},
+       booktitle = {Proceedings of the 31st Symposium on Implementation and Application of Functional Languages},
+       publisher = {{ACM}},
+       author = {Staps, Camil and van Groningen, John and Plasmeijer, Rinus},
+       date = {2019},
        note = {event-place: Singapore, Singapore},
        keywords = {functional programming, interpreters, laziness, sandboxing, web-assembly},
        file = {Staps et al. - 2019 - Lazy Interworking of Compiled and Interpreted Code.pdf:/home/mrl/.local/share/zotero/storage/LGS69CH8/Staps et al. - 2019 - Lazy Interworking of Compiled and Interpreted Code.pdf:application/pdf},
 }
 
 @incollection{mernik_extensible_2013,
-       address = {Hershey, PA, USA},
-       title = {Extensible {Languages}: {Blurring} the {Distinction} between {DSL} and {GPL}},
+       location = {Hershey, {PA}, {USA}},
+       title = {Extensible Languages: Blurring the Distinction between {DSL} and {GPL}},
        isbn = {978-1-4666-2092-6},
-       abstract = {Out of a concern for focus and concision, domain-specific languages (DSLs) are usually very different from general purpose programming languages (GPLs), both at the syntactic and the semantic levels. One approach to DSL implementation is to write a full language infrastructure, including parser, interpreter, or even compiler. Another approach however, is to ground the DSL into an extensible GPL, giving you control over its own syntax and semantics. The DSL may then be designed merely as an extension to the original GPL, and its implementation may boil down to expressing only the differences with it. The task of DSL implementation is hence considerably eased. The purpose of this chapter is to provide a tour of the features that make a GPL extensible, and to demonstrate how, in this context, the distinction between DSL and GPL can blur, sometimes to the point of complete disappearance.},
-       booktitle = {Formal and {Practical} {Aspects} of {Domain}-{Specific} {Languages}: {Recent} {Developments}},
-       publisher = {IGI Global},
+       abstract = {Out of a concern for focus and concision, domain-specific languages ({DSLs}) are usually very different from general purpose programming languages ({GPLs}), both at the syntactic and the semantic levels. One approach to {DSL} implementation is to write a full language infrastructure, including parser, interpreter, or even compiler. Another approach however, is to ground the {DSL} into an extensible {GPL}, giving you control over its own syntax and semantics. The {DSL} may then be designed merely as an extension to the original {GPL}, and its implementation may boil down to expressing only the differences with it. The task of {DSL} implementation is hence considerably eased. The purpose of this chapter is to provide a tour of the features that make a {GPL} extensible, and to demonstrate how, in this context, the distinction between {DSL} and {GPL} can blur, sometimes to the point of complete disappearance.},
+       pages = {1--31},
+       booktitle = {Formal and Practical Aspects of Domain-Specific Languages: Recent Developments},
+       publisher = {{IGI} Global},
        author = {Verna, Didier},
        editor = {Mernik, Marjan},
-       year = {2013},
+       date = {2013},
        doi = {10.4018/978-1-4666-2092-6.ch001},
-       pages = {1--31},
 }
 
 @inproceedings{hudak_modular_1998,
        title = {Modular domain specific languages and tools},
        doi = {10.1109/ICSR.1998.685738},
-       booktitle = {Proceedings. {Fifth} {International} {Conference} on {Software} {Reuse} ({Cat}. {No}.{98TB100203})},
-       author = {Hudak, P.},
-       year = {1998},
        pages = {134--142},
+       booktitle = {Proceedings. Fifth International Conference on Software Reuse (Cat. No.98TB100203)},
+       author = {Hudak, P.},
+       date = {1998},
        file = {Hudak - 1998 - Modular domain specific languages and tools.pdf:/home/mrl/.local/share/zotero/storage/JX7KZ2ST/Hudak - 1998 - Modular domain specific languages and tools.pdf:application/pdf},
 }
 
 @book{fowler_domain_2010,
        edition = {1st},
-       title = {Domain {Specific} {Languages}},
+       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\#.},
+       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},
+       date = {2010},
        file = {Fowler - 2010 - Domain-specific languages.pdf:/home/mrl/.local/share/zotero/storage/YYMYXTZ5/Fowler - 2010 - Domain-specific languages.pdf:application/pdf},
 }
 
-@misc{lewis_speech_1985,
-       address = {Washington, D.C.},
-       type = {Speech},
+@unpublished{lewis_speech_1985,
+       location = {Washington, D.C.},
        title = {Speech},
        url = {http://www.chetansharma.com/correcting-the-iot-history/},
+       type = {Speech},
+       howpublished = {Speech},
+       note = {Congressional Black Caucus Foundation 15th Annual Legislative Weekend},
        author = {Lewis, Peter T.},
-       month = sep,
-       year = {1985},
+       date = {1985-09},
 }
 
 @article{weiser_computer_1991,
-       title = {The {Computer} for the 21 st {Century}},
+       title = {The Computer for the 21 st Century},
        volume = {265},
-       language = {en},
+       pages = {94--105},
        number = {3},
-       journal = {Scientific American},
+       journaltitle = {Scientific American},
        author = {Weiser, Mark},
-       month = sep,
-       year = {1991},
-       pages = {94--105},
+       date = {1991-09},
+       langid = {english},
        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}},
+       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)},
+       publisher = {Cisco Internet Business Solutions Group ({IBSG})},
        author = {Evans, Dave},
-       month = apr,
-       year = {2011},
+       date = {2011-04},
+       langid = {english},
        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}},
+       location = {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},
+       eventtitle = {First International Conference on Advances in Databases, Knowledge, and Data Applications},
        pages = {36--43},
+       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},
+       date = {2009},
 }
 
 @inproceedings{steenvoorden_tophat_2019,
-       address = {New York, NY, USA},
-       series = {{PPDP} '19},
-       title = {{TopHat}: {A} {Formal} {Foundation} for {Task}-{Oriented} {Programming}},
+       location = {New York, {NY}, {USA}},
+       title = {{TopHat}: A Formal Foundation for Task-Oriented Programming},
        isbn = {978-1-4503-7249-7},
        doi = {10.1145/3354166.3354182},
-       abstract = {Software that models how people work is omnipresent in today's society. Current languages and frameworks often focus on usability by non-programmers, sacrificing flexibility and high level abstraction. Task-oriented programming (TOP) is a programming paradigm that aims to provide the desired level of abstraction while still being expressive enough to describe real world collaboration. It prescribes a declarative programming style to specify multi-user workflows. Workflows can be higher-order. They communicate through typed values on a local and global level. Such specifications can be turned into interactive applications for different platforms, supporting collaboration during execution. TOP has been around for more than a decade, in the forms of iTasks and mTasks, which are tailored for real-world usability. So far, it has not been given a formalisation which is suitable for formal reasoning.In this paper we give a description of the TOP paradigm and then decompose its rich features into elementary language elements, which makes them suitable for formal treatment. We use the simply typed lambda-calculus, extended with pairs and references, as a base language. On top of this language, we develop TopHat, a language for modular interactive workflows. We describe TopHat by means of a layered semantics. These layers consist of multiple big-step evaluations on expressions, and two labelled transition systems, handling user inputs.With TopHat we prepare a way to formally reason about TOP languages and programs. This approach allows for comparison with other work in the field. We have implemented the semantic rules of TopHat in Haskell, and the task layer on top of the iTasks framework. This shows that our approach is feasible, and lets us demonstrate the concepts by means of illustrative case studies. TOP has been applied in projects with the Dutch coast guard, tax office, and navy. Our work matters because formal program verification is important for mission-critical software, especially for systems with concurrency.},
-       booktitle = {Proceedings of the 21st {International} {Symposium} on {Principles} and {Practice} of {Declarative} {Programming}},
-       publisher = {ACM},
+       series = {{PPDP} '19},
+       abstract = {Software that models how people work is omnipresent in today's society. Current languages and frameworks often focus on usability by non-programmers, sacrificing flexibility and high level abstraction. Task-oriented programming ({TOP}) is a programming paradigm that aims to provide the desired level of abstraction while still being expressive enough to describe real world collaboration. It prescribes a declarative programming style to specify multi-user workflows. Workflows can be higher-order. They communicate through typed values on a local and global level. Such specifications can be turned into interactive applications for different platforms, supporting collaboration during execution. {TOP} has been around for more than a decade, in the forms of {iTasks} and {mTasks}, which are tailored for real-world usability. So far, it has not been given a formalisation which is suitable for formal reasoning.In this paper we give a description of the {TOP} paradigm and then decompose its rich features into elementary language elements, which makes them suitable for formal treatment. We use the simply typed lambda-calculus, extended with pairs and references, as a base language. On top of this language, we develop {TopHat}, a language for modular interactive workflows. We describe {TopHat} by means of a layered semantics. These layers consist of multiple big-step evaluations on expressions, and two labelled transition systems, handling user inputs.With {TopHat} we prepare a way to formally reason about {TOP} languages and programs. This approach allows for comparison with other work in the field. We have implemented the semantic rules of {TopHat} in Haskell, and the task layer on top of the {iTasks} framework. This shows that our approach is feasible, and lets us demonstrate the concepts by means of illustrative case studies. {TOP} has been applied in projects with the Dutch coast guard, tax office, and navy. Our work matters because formal program verification is important for mission-critical software, especially for systems with concurrency.},
+       booktitle = {Proceedings of the 21st International Symposium on Principles and Practice of Declarative Programming},
+       publisher = {{ACM}},
        author = {Steenvoorden, Tim and Naus, Nico and Klinik, Markus},
-       year = {2019},
+       date = {2019},
        note = {event-place: Porto, Portugal},
        file = {Steenvoorden et al. - 2019 - TopHat A Formal Foundation for Task-Oriented Prog.pdf:/home/mrl/.local/share/zotero/storage/E9W4WKZC/Steenvoorden et al. - 2019 - TopHat A Formal Foundation for Task-Oriented Prog.pdf:application/pdf},
 }
 
 @incollection{koopman_type-safe_2019,
-       address = {Cham},
-       title = {Type-{Safe} {Functions} and {Tasks} in a {Shallow} {Embedded} {DSL} for {Microprocessors}},
+       location = {Cham},
+       title = {Type-Safe Functions and Tasks in a Shallow Embedded {DSL} for Microprocessors},
        isbn = {978-3-030-28346-9},
-       abstract = {The Internet of Things, IoT, brings us large amounts of connected computing devices that are equipped with dedicated sensors and actuators. These computing devices are typically driven by a cheap microprocessor system with a relatively slow processor and a very limited amount of memory. Due to the special input-output capabilities of IoT devices and their connections it is very attractive to execute (parts of) programs on these microcomputers.},
-       booktitle = {Central {European} {Functional} {Programming} {School}: 6th {Summer} {School}, {CEFP} 2015, {Budapest}, {Hungary}, {July} 6–10, 2015, {Revised} {Selected} {Papers}},
+       abstract = {The Internet of Things, {IoT}, brings us large amounts of connected computing devices that are equipped with dedicated sensors and actuators. These computing devices are typically driven by a cheap microprocessor system with a relatively slow processor and a very limited amount of memory. Due to the special input-output capabilities of {IoT} devices and their connections it is very attractive to execute (parts of) programs on these microcomputers.},
+       pages = {283--340},
+       booktitle = {Central European Functional Programming School: 6th Summer School, {CEFP} 2015, Budapest, Hungary, July 6–10, 2015, Revised Selected Papers},
        publisher = {Springer International Publishing},
        author = {Koopman, Pieter and Plasmeijer, Rinus},
-       editor = {Zs\'{o}k, Vikt\'{o}ria and Porkol\'{a}b, Zolt\'{a}n and Horv\'{a}th, Zolt\'{a}n},
-       year = {2019},
+       editor = {Zsók, Viktória and Porkoláb, Zoltán and Horváth, Zoltán},
+       date = {2019},
        doi = {10.1007/978-3-030-28346-9_8},
-       pages = {283--340},
        file = {Koopman and Plasmeijer - 2019 - Type-Safe Functions and Tasks in a Shallow Embedde.pdf:/home/mrl/.local/share/zotero/storage/UY2DY4EJ/Koopman and Plasmeijer - 2019 - Type-Safe Functions and Tasks in a Shallow Embedde.pdf:application/pdf},
 }
 
-@techreport{cheney_first-class_2003,
+@report{cheney_first-class_2003,
        title = {First-class phantom types},
        url = {https://ecommons.cornell.edu/handle/1813/5614},
-       number = {TR2003-1901},
-       urldate = {2017-05-15},
+       number = {{TR}2003-1901},
        institution = {Cornell University},
        author = {Cheney, James and Hinze, Ralf},
-       year = {2003},
+       urldate = {2017-05-15},
+       date = {2003},
        file = {Cheney and Hinze - 2003 - First-class phantom types.pdf:/home/mrl/.local/share/zotero/storage/IBKGCFG2/Cheney and Hinze - 2003 - First-class phantom types.pdf:application/pdf},
 }
 
 @article{mitchell_abstract_1988,
-       title = {Abstract {Types} {Have} {Existential} {Type}},
+       title = {Abstract Types Have Existential Type},
        volume = {10},
        issn = {0164-0925},
        doi = {10.1145/44501.45065},
-       abstract = {Abstract data type declarations appear in typed programming languages like Ada, Alphard, CLU and ML. This form of declaration binds a list of identifiers to a type with associated operations, a composite “value” we call a data algebra. We use a second-order typed lambda calculus SOL to show how data algebras may be given types, passed as parameters, and returned as results of function calls. In the process, we discuss the semantics of abstract data type declarations and review a connection between typed programming languages and constructive logic.},
+       abstract = {Abstract data type declarations appear in typed programming languages like Ada, Alphard, {CLU} and {ML}. This form of declaration binds a list of identifiers to a type with associated operations, a composite “value” we call a data algebra. We use a second-order typed lambda calculus {SOL} to show how data algebras may be given types, passed as parameters, and returned as results of function calls. In the process, we discuss the semantics of abstract data type declarations and review a connection between typed programming languages and constructive logic.},
+       pages = {470--502},
        number = {3},
-       journal = {ACM Trans. Program. Lang. Syst.},
+       journaltitle = {{ACM} Trans. Program. Lang. Syst.},
        author = {Mitchell, John C. and Plotkin, Gordon D.},
-       month = jul,
-       year = {1988},
-       note = {Place: New York, NY, USA
-Publisher: ACM},
-       pages = {470--502},
+       date = {1988-07},
+       note = {Place: New York, {NY}, {USA}
+Publisher: {ACM}},
        file = {Mitchell and Plotkin - 1988 - Abstract types have existential type.pdf:/home/mrl/.local/share/zotero/storage/QXDE5H7C/Mitchell and Plotkin - 1988 - Abstract types have existential type.pdf:application/pdf},
 }
 
 @inproceedings{baars_typing_2002,
-       address = {New York, NY, USA},
-       series = {{ICFP} '02},
-       title = {Typing {Dynamic} {Typing}},
+       location = {New York, {NY}, {USA}},
+       title = {Typing Dynamic Typing},
        isbn = {1-58113-487-8},
        doi = {10.1145/581478.581494},
-       abstract = {Even when programming in a statically typed language we every now and then encounter statically untypable values; such values result from interpreting values or from communicating with the outside world. To cope with this problem most languages include some form of dynamic types. It may be that the core language has been explicitly extended with such a type, or that one is allowed to live dangerously by using functions like unsafeCoerce. We show how, by a careful use of existentially and universally quantified types, one may achievem the same effect, without extending the language with new or unsafe features. The techniques explained are universally applicable, provided the core language is expressive enough; this is the case for the common implementations of Haskell. The techniques are used in the description of a type checking compiler that, starting from an expression term, constructs a typed function representing the semantics of that expression. In this function the overhead associated with the type checking is only once being paid for; in this sense we have thus achieved static type checking.},
-       booktitle = {Proceedings of the {Seventh} {ACM} {SIGPLAN} {International} {Conference} on {Functional} {Programming}},
-       publisher = {ACM},
+       series = {{ICFP} '02},
+       abstract = {Even when programming in a statically typed language we every now and then encounter statically untypable values; such values result from interpreting values or from communicating with the outside world. To cope with this problem most languages include some form of dynamic types. It may be that the core language has been explicitly extended with such a type, or that one is allowed to live dangerously by using functions like {unsafeCoerce}. We show how, by a careful use of existentially and universally quantified types, one may achievem the same effect, without extending the language with new or unsafe features. The techniques explained are universally applicable, provided the core language is expressive enough; this is the case for the common implementations of Haskell. The techniques are used in the description of a type checking compiler that, starting from an expression term, constructs a typed function representing the semantics of that expression. In this function the overhead associated with the type checking is only once being paid for; in this sense we have thus achieved static type checking.},
+       pages = {157--166},
+       booktitle = {Proceedings of the Seventh {ACM} {SIGPLAN} International Conference on Functional Programming},
+       publisher = {{ACM}},
        author = {Baars, Arthur I. and Swierstra, S. Doaitse},
-       year = {2002},
-       note = {event-place: Pittsburgh, PA, USA},
+       date = {2002},
+       note = {event-place: Pittsburgh, {PA}, {USA}},
        keywords = {coercions, dynamic typing, Haskell, Leibnitz' rule, quantified types, static typing, type equality, typed interpreters},
-       pages = {157--166},
        file = {Baars and Swierstra - 2002 - Typing dynamic typing.pdf:/home/mrl/.local/share/zotero/storage/QSGVSTM4/Baars and Swierstra - 2002 - Typing dynamic typing.pdf:application/pdf},
 }
 
 @inproceedings{young_adding_2021,
-       address = {Berlin, Heidelberg},
-       title = {On {Adding} {Pattern} {Matching} to {Haskell}-{Based} {Deeply} {Embedded} {Domain} {Specific} {Languages}},
+       location = {Berlin, Heidelberg},
+       title = {On Adding Pattern Matching to Haskell-Based Deeply Embedded Domain Specific Languages},
        isbn = {978-3-030-67437-3},
        doi = {10.1007/978-3-030-67438-0_2},
        abstract = {Capturing control flow is the Achilles heel of Haskell-based deeply embedded domain specific languages. Rather than use the builtin control flow mechanisms, artificial control flow combinators are used instead. However, capturing traditional control flow in a deeply embedded domain specific language would support the writing of programs in a natural style by allowing the programmer to use the constructs that are already builtin to the base language, such as pattern matching and recursion. In this paper, we expand the capabilities of Haskell-based deep embeddings with a compiler extension for reifying conditionals and pattern matching. With this new support, the subset of Haskell that we use for expressing deeply embedded domain specific languages can be cleaner, Haskell-idiomatic, and more declarative in nature.},
-       booktitle = {Practical {Aspects} of {Declarative} {Languages}: 23rd {International} {Symposium}, {PADL} 2021, {Copenhagen}, {Denmark}, {January} 18-19, 2021, {Proceedings}},
+       pages = {20--36},
+       booktitle = {Practical Aspects of Declarative Languages: 23rd International Symposium, {PADL} 2021, Copenhagen, Denmark, January 18-19, 2021, Proceedings},
        publisher = {Springer-Verlag},
        author = {Young, David and Grebe, Mark and Gill, Andy},
-       year = {2021},
+       date = {2021},
        note = {event-place: Copenhagen, Denmark},
-       pages = {20--36},
        file = {Young et al. - 2021 - On Adding Pattern Matching to Haskell-Based Deeply.pdf:/home/mrl/.local/share/zotero/storage/XRYWKWPT/Young et al. - 2021 - On Adding Pattern Matching to Haskell-Based Deeply.pdf:application/pdf},
 }
 
 @incollection{hinze_generic_2003,
-       address = {Berlin, Heidelberg},
-       title = {Generic {Haskell}: {Practice} and {Theory}},
+       location = {Berlin, Heidelberg},
+       title = {Generic Haskell: Practice and Theory},
        isbn = {978-3-540-45191-4},
        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}},
+       pages = {1--56},
+       booktitle = {Generic Programming: Advanced Lectures},
        publisher = {Springer Berlin Heidelberg},
        author = {Hinze, Ralf and Jeuring, Johan},
        editor = {Backhouse, Roland and Gibbons, Jeremy},
-       year = {2003},
+       date = {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},
 }
 
 @article{alhirabi_security_2021,
-       title = {Security and {Privacy} {Requirements} for the {Internet} of {Things}: {A} {Survey}},
+       title = {Security and Privacy Requirements for the Internet of Things: A Survey},
        volume = {2},
        issn = {2691-1914},
        doi = {10.1145/3437537},
-       abstract = {The design and development process for internet of things (IoT) applications is more complicated than that for desktop, mobile, or web applications. First, IoT applications require both software and hardware to work together across many different types of nodes with different capabilities under different conditions. Second, IoT application development involves different types of software engineers such as desktop, web, embedded, and mobile to work together. Furthermore, non-software engineering personnel such as business analysts are also involved in the design process. In addition to the complexity of having multiple software engineering specialists cooperating to merge different hardware and software components together, the development process requires different software and hardware stacks to be integrated together (e.g., different stacks from different companies such as Microsoft Azure and IBM Bluemix). Due to the above complexities, non-functional requirements (such as security and privacy, which are highly important in the context of the IoT) tend to be ignored or treated as though they are less important in the IoT application development process. This article reviews techniques, methods, and tools to support security and privacy requirements in existing non-IoT application designs, enabling their use and integration into IoT applications. This article primarily focuses on design notations, models, and languages that facilitate capturing non-functional requirements (i.e., security and privacy). Our goal is not only to analyse, compare, and consolidate the empirical research but also to appreciate their findings and discuss their applicability for the IoT.},
+       abstract = {The design and development process for internet of things ({IoT}) applications is more complicated than that for desktop, mobile, or web applications. First, {IoT} applications require both software and hardware to work together across many different types of nodes with different capabilities under different conditions. Second, {IoT} application development involves different types of software engineers such as desktop, web, embedded, and mobile to work together. Furthermore, non-software engineering personnel such as business analysts are also involved in the design process. In addition to the complexity of having multiple software engineering specialists cooperating to merge different hardware and software components together, the development process requires different software and hardware stacks to be integrated together (e.g., different stacks from different companies such as Microsoft Azure and {IBM} Bluemix). Due to the above complexities, non-functional requirements (such as security and privacy, which are highly important in the context of the {IoT}) tend to be ignored or treated as though they are less important in the {IoT} application development process. This article reviews techniques, methods, and tools to support security and privacy requirements in existing non-{IoT} application designs, enabling their use and integration into {IoT} applications. This article primarily focuses on design notations, models, and languages that facilitate capturing non-functional requirements (i.e., security and privacy). Our goal is not only to analyse, compare, and consolidate the empirical research but also to appreciate their findings and discuss their applicability for the {IoT}.},
        number = {1},
-       journal = {ACM Trans. Internet Things},
+       journaltitle = {{ACM} Trans. Internet Things},
        author = {Alhirabi, Nada and Rana, Omer and Perera, Charith},
-       month = feb,
-       year = {2021},
-       note = {Place: New York, NY, USA
-Publisher: ACM},
-       keywords = {design principles, Internet of Things, non functional requirements, notation, software design tools, software engineering},
+       date = {2021-02},
+       note = {Place: New York, {NY}, {USA}
+Publisher: {ACM}},
+       keywords = {Internet of Things, design principles, non functional requirements, notation, software design tools, software engineering},
        file = {Alhirabi et al. - 2021 - Security and Privacy Requirements for the Internet.pdf:/home/mrl/.local/share/zotero/storage/7UN4IF62/Alhirabi et al. - 2021 - Security and Privacy Requirements for the Internet.pdf:text/html},
 }
 
 @inproceedings{torrano_strictness_2005,
-       address = {Bristol, UK},
-       series = {Trends in {Functional} {Programming}},
-       title = {Strictness {Analysis} and let-to-case {Transformation} using {Template} {Haskell}},
+       location = {Bristol, {UK}},
+       title = {Strictness Analysis and let-to-case Transformation using Template Haskell},
        volume = {6},
        isbn = {978-1-84150-176-5},
-       booktitle = {Revised {Selected} {Papers} from the {Sixth} {Symposium} on {Trends} in {Functional} {Programming}, {TFP} 2005, {Tallinn}, {Estonia}, 23-24 {September} 2005},
+       series = {Trends in Functional Programming},
+       pages = {429--442},
+       booktitle = {Revised Selected Papers from the Sixth Symposium on Trends in Functional Programming, {TFP} 2005, Tallinn, Estonia, 23-24 September 2005},
        publisher = {Intellect},
        author = {Torrano, Carmen and Segura, Clara},
        editor = {Eekelen, Marko C. J. D. van},
-       year = {2005},
+       date = {2005},
        note = {event-place: Talinn, Estonia},
-       pages = {429--442},
        file = {Torrano and Segura - Strictness Analysis and let-to-case Transformation.pdf:/home/mrl/.local/share/zotero/storage/RIYW9WFT/Torrano and Segura - Strictness Analysis and let-to-case Transformation.pdf:application/pdf},
 }
 
 @inproceedings{polak_automatic_2006,
-       address = {Bristol, UK},
-       series = {Trends in {Functional} {Programming}},
-       title = {Automatic {Graphical} {User} {Interface} {Form} {Generation} {Using} {Template} {Haskell}},
+       location = {Bristol, {UK}},
+       title = {Automatic Graphical User Interface Form Generation Using Template Haskell},
        volume = {7},
        isbn = {978-1-84150-188-8},
-       booktitle = {Revised {Selected} {Papers} from the {Seventh} {Symposium} on {Trends} in {Functional} {Programming}, {TFP} 2006, {Nottingham}, {United} {Kingdom}, 19-21 {April} 2006},
+       series = {Trends in Functional Programming},
+       pages = {1--11},
+       booktitle = {Revised Selected Papers from the Seventh Symposium on Trends in Functional Programming, {TFP} 2006, Nottingham, United Kingdom, 19-21 April 2006},
        publisher = {Intellect},
        author = {Polak, Gracjan and Jarosz, Janusz},
        editor = {Nilsson, Henrik},
-       year = {2006},
-       note = {event-place: Nottingham, UK},
-       pages = {1--11},
+       date = {2006},
+       note = {event-place: Nottingham, {UK}},
        file = {Polak and Jarosz - Automatic Graphical User Interface Form Generation.pdf:/home/mrl/.local/share/zotero/storage/8VK3D8JQ/Polak and Jarosz - Automatic Graphical User Interface Form Generation.pdf:application/pdf},
 }
 
 @inproceedings{koopman_executable_2011,
-       address = {Berlin, Heidelberg},
-       title = {An {Executable} and {Testable} {Semantics} for {iTasks}},
+       location = {Berlin, Heidelberg},
+       title = {An Executable and Testable Semantics for {iTasks}},
        isbn = {978-3-642-24452-0},
-       abstract = {The iTask system is an easy to use combinator library for specifying dynamic data dependent workflows in a very flexible way. The specified workflows are executed as a multi-user web-application. The implementation of the iTask system is fairly complicated. Hence we cannot use it for reasoning about the semantics of workflows in the iTask system. In this paper we define an executable semantics that specifies how workflows react on events generated by the workers executing them. The semantics is used to explain iTask and to reason about iTask. Based on this semantics we define a mathematical notion of equivalence of tasks and show how this equivalence for tasks can be approximated automatically. Advantages of this executable semantics are: it is easy to validate the semantics by interactive simulation; properties of the semantics can be tested by our model-based test system Gþinspace∀þinspacest. Gþinspace∀þinspacest can test a large number of properties within seconds. These tests appeared to be a good indication about the consistency of the specified semantics and equivalence relation for tasks. The automatic testing of properties was very helpful in the development of the semantics. The contribution of this paper is a semantics for iTask as well as the method used to construct this operational semantics.},
-       booktitle = {Implementation and {Application} of {Functional} {Languages}},
+       abstract = {The {iTask} system is an easy to use combinator library for specifying dynamic data dependent workflows in a very flexible way. The specified workflows are executed as a multi-user web-application. The implementation of the {iTask} system is fairly complicated. Hence we cannot use it for reasoning about the semantics of workflows in the {iTask} system. In this paper we define an executable semantics that specifies how workflows react on events generated by the workers executing them. The semantics is used to explain {iTask} and to reason about {iTask}. Based on this semantics we define a mathematical notion of equivalence of tasks and show how this equivalence for tasks can be approximated automatically. Advantages of this executable semantics are: it is easy to validate the semantics by interactive simulation; properties of the semantics can be tested by our model-based test system Gþinspace∀þinspacest. Gþinspace∀þinspacest can test a large number of properties within seconds. These tests appeared to be a good indication about the consistency of the specified semantics and equivalence relation for tasks. The automatic testing of properties was very helpful in the development of the semantics. The contribution of this paper is a semantics for {iTask} as well as the method used to construct this operational semantics.},
+       pages = {212--232},
+       booktitle = {Implementation and Application of Functional Languages},
        publisher = {Springer Berlin Heidelberg},
        author = {Koopman, Pieter and Plasmeijer, Rinus and Achten, Peter},
        editor = {Scholz, Sven-Bodo and Chitil, Olaf},
-       year = {2011},
-       pages = {212--232},
+       date = {2011},
        file = {Koopman et al. - 2011 - An Executable and Testable Semantics for iTasks.pdf:/home/mrl/.local/share/zotero/storage/6LFA9MNU/Koopman et al. - 2011 - An Executable and Testable Semantics for iTasks.pdf:application/pdf},
 }
 
-@phdthesis{antonova_mtask_2022,
-       address = {Nijmegen},
-       type = {Bachelor's {Thesis}},
-       title = {{mTask} {Semantics} and its {Comparison} to {TopHat}},
-       language = {en},
-       school = {Radboud University},
+@thesis{antonova_mtask_2022,
+       location = {Nijmegen},
+       title = {{mTask} Semantics and its Comparison to {TopHat}},
+       pagetotal = {60},
+       institution = {Radboud University},
+       type = {Bachelor's Thesis},
        author = {Antonova, Elina},
-       year = {2022},
+       date = {2022},
+       langid = {english},
        file = {Crooijmans - 2021 - Reducing the Power Consumption of IoT Devices in T.pdf:/home/mrl/.local/share/zotero/storage/YIEQ97KK/Crooijmans - 2021 - Reducing the Power Consumption of IoT Devices in T.pdf:application/pdf},
 }
 
 @inproceedings{lijnse_capturing_2011,
-       address = {Lisbon, Portugal},
-       title = {Capturing the {Netherlands} {Coast} {Guard}'s {SAR} {Workflow} with {iTasks}},
-       language = {en},
-       booktitle = {Proceedings of the 8th {International} {ISCRAM} {Conference}},
-       author = {Lijnse, Bas and Nanne, Ruud and Jansen, Jan Martin and Plasmeijer, Rinus},
-       year = {2011},
+       location = {Lisbon, Portugal},
+       title = {Capturing the Netherlands Coast Guard's {SAR} Workflow with {iTasks}},
        pages = {10},
+       booktitle = {Proceedings of the 8th International {ISCRAM} Conference},
+       author = {Lijnse, Bas and Nanne, Ruud and Jansen, Jan Martin and Plasmeijer, Rinus},
+       date = {2011},
+       langid = {english},
        file = {Lijnse et al. - 2011 - Capturing the Netherlands Coast Guard's SAR Workfl.pdf:/home/mrl/.local/share/zotero/storage/46DHR55I/Lijnse et al. - 2011 - Capturing the Netherlands Coast Guard's SAR Workfl.pdf:application/pdf},
 }
 
-@misc{wadler_expression_1998,
+@letter{wadler_expression_1998,
        title = {The expression problem},
        url = {https://homepages.inf.ed.ac.uk/wadler/papers/expression/expression.txt},
-       language = {en},
-       urldate = {2021-02-24},
+       type = {E-mail},
        author = {Wadler, Philip},
-       month = nov,
-       year = {1998},
-       note = {e-mail message, accessed-on: 2021-02-24},
+       urldate = {2021-02-24},
+       date = {1998-11-12},
+       langid = {english},
 }
 
-@misc{margaret_deuter_rhapsody_2015,
-       address = {Oxford},
+@inreference{margaret_deuter_rhapsody_2015,
+       location = {Oxford},
        edition = {Ninth edition},
        title = {Rhapsody},
-       journal = {Oxford Advanced Learner's Dictionary of Current English},
+       booktitle = {Oxford Advanced Learner's Dictionary of Current English},
        publisher = {Oxford University Press},
        author = {{A S Hornby}},
        editor = {{Margaret Deuter} and {Jennifer Bradbery} and {Joanna Turnbull}},
-       year = {2015},
+       date = {2015},
 }
 
-@misc{wikipedia_contributors_rhapsody_2022,
-       title = {Rhapsody (music) — {Wikipedia}, {The} {Free} {Encyclopedia}},
+@inreference{wikipedia_contributors_rhapsody_2022,
+       title = {Rhapsody (music) — Wikipedia, The Free Encyclopedia},
        url = {https://en.wikipedia.org/w/index.php?title=Rhapsody_(music)\&oldid=1068385257},
-       urldate = {2022-09-06},
-       journal = {Wikipedia},
+       booktitle = {Wikipedia},
        author = {{Wikipedia contributors}},
-       year = {2022},
+       urldate = {2022-09-06},
+       date = {2022},
        note = {accessed on: 2022-09-06},
 }
 
 @incollection{backus_introduction_1990,
-       address = {USA},
-       title = {An {Introduction} to the {Programming} {Language} {FL}},
+       location = {{USA}},
+       title = {An Introduction to the Programming Language {FL}},
        isbn = {0-201-17236-4},
-       booktitle = {Research {Topics} in {Functional} {Programming}},
+       pages = {219--247},
+       booktitle = {Research Topics in Functional Programming},
        publisher = {Addison-Wesley Longman Publishing Co., Inc.},
        author = {Backus, John and Williams, John H. and Wimmers, Edward L.},
-       year = {1990},
-       pages = {219--247},
+       date = {1990},
 }
 
 @article{achten_ins_1995,
-       title = {The ins and outs of {Clean} {I}/{O}},
+       title = {The ins and outs of Clean I/O},
        volume = {5},
        doi = {10.1017/S0956796800001258},
+       pages = {81--110},
        number = {1},
-       journal = {Journal of Functional Programming},
+       journaltitle = {Journal of Functional Programming},
        author = {Achten, Peter and Plasmeijer, Rinus},
-       year = {1995},
+       date = {1995},
        note = {Publisher: Cambridge University Press},
-       pages = {81--110},
 }
 
 @inproceedings{peyton_jones_imperative_1993,
-       address = {New York, NY, USA},
-       series = {{POPL} '93},
-       title = {Imperative {Functional} {Programming}},
+       location = {New York, {NY}, {USA}},
+       title = {Imperative Functional Programming},
        isbn = {0-89791-560-7},
        doi = {10.1145/158511.158524},
+       series = {{POPL} '93},
        abstract = {We present a new model, based on monads, for performing input/output in a non-strict, purely functional language. It is composable, extensible, efficient, requires no extensions to the type system, and extends smoothly to incorporate mixed-language working and in-place array updates.},
-       booktitle = {Proceedings of the 20th {ACM} {SIGPLAN}-{SIGACT} {Symposium} on {Principles} of {Programming} {Languages}},
-       publisher = {ACM},
-       author = {Peyton Jones, Simon and Wadler, Philip},
-       year = {1993},
-       note = {event-place: Charleston, South Carolina, USA},
        pages = {71--84},
+       booktitle = {Proceedings of the 20th {ACM} {SIGPLAN}-{SIGACT} Symposium on Principles of Programming Languages},
+       publisher = {{ACM}},
+       author = {Peyton Jones, Simon and Wadler, Philip},
+       date = {1993},
+       note = {event-place: Charleston, South Carolina, {USA}},
        file = {Peyton Jones and Wadler - 1993 - Imperative Functional Programming.pdf:/home/mrl/.local/share/zotero/storage/9DQ5V3N3/Peyton Jones and Wadler - 1993 - Imperative Functional Programming.pdf:application/pdf},
 }
 
 @inproceedings{achten_high_1993,
-       address = {London},
-       title = {High {Level} {Specification} of {I}/{O} in {Functional} {Languages}},
+       location = {London},
+       title = {High Level Specification of I/O in Functional Languages},
        isbn = {978-1-4471-3215-8},
        abstract = {The interface with the outside world has always been one of the weakest points of functional languages. It is not easy to incorporate I/O without being allowed to do side-effects. Furthermore, functional languages allow redexes to be evaluated in any order while I/O generally has to be performed in a very specific order. In this paper we present a new solution for the I/O problem which we have incorporated in the language Concurrent Clean. Concurrent Clean offers a linear type system called Unique Types. It makes it possible to define functions with side-effects without violating the functional semantics. Now it is possible to change any object in the world in the way we wanted: e.g. arrays can be updated in-situ, arbitrary file manipulation is possible. We have used this powerful tool among others to create a library for window based I/O. Using an explicit environment passing scheme provides a high-level and elegant functional specification method for I/O, called Event I/O. Now the specification of I/O has become one of the strengths of functional languages: interactive programs written in Concurrent Clean are concise, easy to write and comprehend as well as efficient. The presented solution can in principle be applied for any other functional language as well provided that it actually uses graph rewriting semantics in the implementation.},
-       booktitle = {Functional {Programming}, {Glasgow} 1992},
+       pages = {1--17},
+       booktitle = {Functional Programming, Glasgow 1992},
        publisher = {Springer London},
-       author = {Achten, Peter and \noopsort{Groningen}{van Groningen}, John and Plasmeijer, Rinus},
+       author = {Achten, Peter and van Groningen, John and Plasmeijer, Rinus},
        editor = {Launchbury, John and Sansom, Patrick},
-       year = {1993},
-       pages = {1--17},
+       date = {1993},
        file = {Achten et al. - 1993 - High Level Specification of IO in Functional Lang.pdf:/home/mrl/.local/share/zotero/storage/4QVH7AYC/Achten et al. - 1993 - High Level Specification of IO in Functional Lang.pdf:application/pdf},
 }
 
 @inproceedings{pickering_staged_2020,
-       address = {New York, NY, USA},
-       series = {Haskell 2020},
-       title = {Staged {Sums} of {Products}},
+       location = {New York, {NY}, {USA}},
+       title = {Staged Sums of Products},
        isbn = {978-1-4503-8050-8},
        doi = {10.1145/3406088.3409021},
+       series = {Haskell 2020},
        abstract = {Generic programming libraries have historically traded efficiency in return for convenience, and the generics-sop library is no exception. It offers a simple, uniform, representation of all datatypes precisely as a sum of products, making it easy to write generic functions. We show how to finally make generics-sop fast through the use of staging with Typed Template Haskell.},
-       booktitle = {Proceedings of the 13th {ACM} {SIGPLAN} {International} {Symposium} on {Haskell}},
-       publisher = {ACM},
-       author = {Pickering, Matthew and L\"{o}h, Andres and Wu, Nicolas},
-       year = {2020},
-       note = {event-place: Virtual Event, USA},
-       keywords = {generic programming, staging},
        pages = {122--135},
+       booktitle = {Proceedings of the 13th {ACM} {SIGPLAN} International Symposium on Haskell},
+       publisher = {{ACM}},
+       author = {Pickering, Matthew and Löh, Andres and Wu, Nicolas},
+       date = {2020},
+       note = {event-place: Virtual Event, {USA}},
+       keywords = {generic programming, staging},
        file = {Pickering et al. - 2020 - Staged Sums of Products.pdf:/home/mrl/.local/share/zotero/storage/Q6ZWX4YP/Pickering et al. - 2020 - Staged Sums of Products.pdf:application/pdf},
 }
 
 @article{xie_staging_2022,
-       title = {Staging with {Class}: {A} {Specification} for {Typed} {Template} {Haskell}},
+       title = {Staging with Class: A Specification for Typed Template Haskell},
        volume = {6},
        doi = {10.1145/3498723},
        abstract = {Multi-stage programming using typed code quotation is an established technique for writing optimizing code generators with strong type-safety guarantees. Unfortunately, quotation in Haskell interacts poorly with type classes, making it difficult to write robust multi-stage programs. We study this unsound interaction and propose a resolution, staged type class constraints, which we formalize in a source calculus $\lambda$⇒ that elaborates into an explicit core calculus F. We show type soundness of both calculi, establishing that well-typed, well-staged source programs always elaborate to well-typed, well-staged core programs, and prove beta and eta rules for code quotations. Our design allows programmers to incorporate type classes into multi-stage programs with confidence. Although motivated by Haskell, it is also suitable as a foundation for other languages that support both overloading and quotation.},
-       number = {POPL},
-       journal = {Proc. ACM Program. Lang.},
-       author = {Xie, Ningning and Pickering, Matthew and L\"{o}h, Andres and Wu, Nicolas and Yallop, Jeremy and Wang, Meng},
-       month = jan,
-       year = {2022},
-       note = {Place: New York, NY, USA
-Publisher: ACM},
+       issue = {{POPL}},
+       journaltitle = {Proc. {ACM} Program. Lang.},
+       author = {Xie, Ningning and Pickering, Matthew and Löh, Andres and Wu, Nicolas and Yallop, Jeremy and Wang, Meng},
+       date = {2022-01},
+       note = {Place: New York, {NY}, {USA}
+Publisher: {ACM}},
        keywords = {Staging, Type Classes, Typed Template Haskell},
        file = {Xie et al. - 2022 - Staging with Class A Specification for Typed Temp.pdf:/home/mrl/.local/share/zotero/storage/QGDB5YHR/Xie et al. - 2022 - Staging with Class A Specification for Typed Temp.pdf:application/pdf},
 }
@@ -1774,423 +1782,422 @@ Publisher: ACM},
        title = {Type-safe pattern combinators},
        volume = {19},
        doi = {10.1017/S0956796808007089},
+       pages = {145--156},
        number = {2},
-       journal = {Journal of Functional Programming},
+       journaltitle = {Journal of Functional Programming},
        author = {Rhiger, Morten},
-       year = {2009},
+       date = {2009},
        note = {Publisher: Cambridge University Press},
-       pages = {145--156},
        file = {RHIGER - 2009 - Type-safe pattern combinators.pdf:/home/mrl/.local/share/zotero/storage/D4N7PGBS/RHIGER - 2009 - Type-safe pattern combinators.pdf:application/pdf},
 }
 
 @inproceedings{de_vries_true_2014,
-       address = {New York, NY, USA},
-       series = {{WGP} '14},
-       title = {True {Sums} of {Products}},
+       location = {New York, {NY}, {USA}},
+       title = {True Sums of Products},
        isbn = {978-1-4503-3042-8},
        doi = {10.1145/2633628.2633634},
-       abstract = {We introduce the sum-of-products (SOP) view for datatype-generic programming (in Haskell). While many of the libraries that are commonly in use today represent datatypes as arbitrary combinations of binary sums and products, SOP reflects the structure of datatypes more faithfully: each datatype is a single n-ary sum, where each component of the sum is a single n-ary product. This representation turns out to be expressible accurately in GHC with today's extensions. The resulting list-like structure of datatypes allows for the definition of powerful high-level traversal combinators, which in turn encourage the definition of generic functions in a compositional and concise style. A major plus of the SOP view is that it allows to separate function-specific metadata from the main structural representation and recombining this information later.},
-       booktitle = {Proceedings of the 10th {ACM} {SIGPLAN} {Workshop} on {Generic} {Programming}},
-       publisher = {ACM},
-       author = {de Vries, Edsko and L\"{o}h, Andres},
-       year = {2014},
-       note = {event-place: Gothenburg, Sweden},
-       keywords = {datatype-generic programming, generic views, json, lenses, metadata, sums of products, universes},
+       series = {{WGP} '14},
+       abstract = {We introduce the sum-of-products ({SOP}) view for datatype-generic programming (in Haskell). While many of the libraries that are commonly in use today represent datatypes as arbitrary combinations of binary sums and products, {SOP} reflects the structure of datatypes more faithfully: each datatype is a single n-ary sum, where each component of the sum is a single n-ary product. This representation turns out to be expressible accurately in {GHC} with today's extensions. The resulting list-like structure of datatypes allows for the definition of powerful high-level traversal combinators, which in turn encourage the definition of generic functions in a compositional and concise style. A major plus of the {SOP} view is that it allows to separate function-specific metadata from the main structural representation and recombining this information later.},
        pages = {83--94},
+       booktitle = {Proceedings of the 10th {ACM} {SIGPLAN} Workshop on Generic Programming},
+       publisher = {{ACM}},
+       author = {de Vries, Edsko and Löh, Andres},
+       date = {2014},
+       note = {event-place: Gothenburg, Sweden},
+       keywords = {lenses, datatype-generic programming, generic views, json, metadata, sums of products, universes},
+       file = {de Vries and Löh - 2014 - True Sums of Products.pdf:/home/mrl/.local/share/zotero/storage/QHT5IPQA/de Vries and Löh - 2014 - True Sums of Products.pdf:application/pdf},
 }
 
 @article{willis_staged_2020,
-       title = {Staged {Selective} {Parser} {Combinators}},
+       title = {Staged Selective Parser Combinators},
        volume = {4},
        doi = {10.1145/3409002},
        abstract = {Parser combinators are a middle ground between the fine control of hand-rolled parsers and the high-level almost grammar-like appearance of parsers created via parser generators. They also promote a cleaner, compositional design for parsers. Historically, however, they cannot match the performance of their counterparts. This paper describes how to compile parser combinators into parsers of hand-written quality. This is done by leveraging the static information present in the grammar by representing it as a tree. However, in order to exploit this information, it will be necessary to drop support for monadic computation since this generates dynamic structure. Selective functors can help recover lost functionality in the absence of monads, and the parser tree can be partially evaluated with staging. This is implemented in a library called Parsley.},
-       number = {ICFP},
-       journal = {Proc. ACM Program. Lang.},
+       issue = {{ICFP}},
+       journaltitle = {Proc. {ACM} Program. Lang.},
        author = {Willis, Jamie and Wu, Nicolas and Pickering, Matthew},
-       month = aug,
-       year = {2020},
-       note = {Place: New York, NY, USA
-Publisher: ACM},
+       date = {2020-08},
+       note = {Place: New York, {NY}, {USA}
+Publisher: {ACM}},
        keywords = {combinators, meta-programming, parsers},
        file = {Willis et al. - 2020 - Staged Selective Parser Combinators.pdf:/home/mrl/.local/share/zotero/storage/RCD842QK/Willis et al. - 2020 - Staged Selective Parser Combinators.pdf:application/pdf},
 }
 
 @inproceedings{pickering_multi-stage_2019,
-       address = {New York, NY, USA},
-       series = {Haskell 2019},
-       title = {Multi-{Stage} {Programs} in {Context}},
+       location = {New York, {NY}, {USA}},
+       title = {Multi-Stage Programs in Context},
        isbn = {978-1-4503-6813-1},
        doi = {10.1145/3331545.3342597},
-       abstract = {Cross-stage persistence is an essential aspect of multi-stage programming that allows a value defined in one stage to be available in another. However, difficulty arises when implicit information held in types, type classes and implicit parameters needs to be persisted. Without a careful treatment of such implicit information—which are pervasive in Haskell—subtle yet avoidable bugs lurk beneath the surface. This paper demonstrates that in multi-stage programming care must be taken when representing quoted terms so that important implicit information is kept in context and not discarded. The approach is formalised with a type-system, and an implementation in GHC is presented that fixes problems of the previous incarnation.},
-       booktitle = {Proceedings of the 12th {ACM} {SIGPLAN} {International} {Symposium} on {Haskell}},
-       publisher = {ACM},
+       series = {Haskell 2019},
+       abstract = {Cross-stage persistence is an essential aspect of multi-stage programming that allows a value defined in one stage to be available in another. However, difficulty arises when implicit information held in types, type classes and implicit parameters needs to be persisted. Without a careful treatment of such implicit information—which are pervasive in Haskell—subtle yet avoidable bugs lurk beneath the surface. This paper demonstrates that in multi-stage programming care must be taken when representing quoted terms so that important implicit information is kept in context and not discarded. The approach is formalised with a type-system, and an implementation in {GHC} is presented that fixes problems of the previous incarnation.},
+       pages = {71--84},
+       booktitle = {Proceedings of the 12th {ACM} {SIGPLAN} International Symposium on Haskell},
+       publisher = {{ACM}},
        author = {Pickering, Matthew and Wu, Nicolas and Kiss, Csongor},
-       year = {2019},
+       date = {2019},
        note = {event-place: Berlin, Germany},
-       keywords = {implicits, metaprogramming, staging},
-       pages = {71--84},
+       keywords = {metaprogramming, staging, implicits},
        file = {Pickering et al. - 2019 - Multi-Stage Programs in Context.pdf:/home/mrl/.local/share/zotero/storage/3EW7FM44/Pickering et al. - 2019 - Multi-Stage Programs in Context.pdf:application/pdf},
 }
 
 @article{pickering_specification_2021,
-       title = {A {Specification} for {Typed} {Template} {Haskell}},
+       title = {A Specification for Typed Template Haskell},
        volume = {abs/2112.03653},
        doi = {10.48550/arXiv.2112.03653},
-       journal = {CoRR},
-       author = {Pickering, Matthew and L\"{o}h, Andres and Wu, Nicolas},
-       year = {2021},
-       note = {arXiv: 2112.03653},
+       journaltitle = {{CoRR}},
+       author = {Pickering, Matthew and Löh, Andres and Wu, Nicolas},
+       date = {2021},
+       eprinttype = {arxiv},
+       eprint = {2112.03653},
        file = {Pickering et al. - 2021 - A Specification for Typed Template Haskell.pdf:/home/mrl/.local/share/zotero/storage/YBTN4DLK/Pickering et al. - 2021 - A Specification for Typed Template Haskell.pdf:application/pdf},
 }
 
 @book{steenvoorden_tophat_2022,
-       address = {Nijmegen},
-       title = {{TopHat}: {Task}-{Oriented} {Programming} with {Style}},
+       location = {Nijmegen},
+       title = {{TopHat}: Task-Oriented Programming with Style},
        isbn = {978-94-6458-595-7},
-       shorttitle = {{TopHat}: {TOP} with {Style}},
-       language = {English},
-       publisher = {UB Nijmegen},
+       shorttitle = {{TopHat}: {TOP} with Style},
+       publisher = {{UB} Nijmegen},
        author = {Steenvoorden, Tim},
-       year = {2022},
+       date = {2022},
        file = {Steenvoorden - 2022 - TopHat Task-Oriented Programming with Style.pdf:/home/mrl/.local/share/zotero/storage/ZV8IT9J5/Steenvoorden - 2022 - TopHat Task-Oriented Programming with Style.pdf:application/pdf},
 }
 
 @inproceedings{folmer_high-level_2022,
-       address = {Cham},
-       title = {High-{Level} {Synthesis} of {Digital} {Circuits} from {Template} {Haskell} and {SDF}-{AP}},
+       location = {Cham},
+       title = {High-Level Synthesis of Digital Circuits from Template Haskell and {SDF}-{AP}},
        isbn = {978-3-031-15074-6},
-       abstract = {Functional languages as input specifications for HLS-tools allow to specify data dependencies but do not contain a notion of time nor execution order. In this paper, we propose a method to add this notion to the functional description using the dataflow model SDF-AP. SDF-AP consists of patterns that express consumption and production that we can use to enforce resource usage. We created an HLS-tool that can synthesize parallel hardware, both data and control path, based on the repetition, expressed in Higher-Order Functions, combined with specified SDF-AP patterns.},
-       booktitle = {Embedded {Computer} {Systems}: {Architectures}, {Modeling}, and {Simulation}},
+       abstract = {Functional languages as input specifications for {HLS}-tools allow to specify data dependencies but do not contain a notion of time nor execution order. In this paper, we propose a method to add this notion to the functional description using the dataflow model {SDF}-{AP}. {SDF}-{AP} consists of patterns that express consumption and production that we can use to enforce resource usage. We created an {HLS}-tool that can synthesize parallel hardware, both data and control path, based on the repetition, expressed in Higher-Order Functions, combined with specified {SDF}-{AP} patterns.},
+       pages = {3--27},
+       booktitle = {Embedded Computer Systems: Architectures, Modeling, and Simulation},
        publisher = {Springer International Publishing},
        author = {Folmer, H. H. and Groote, R. de and Bekooij, M. J. G.},
        editor = {Orailoglu, Alex and Reichenbach, Marc and Jung, Matthias},
-       year = {2022},
-       pages = {3--27},
+       date = {2022},
        file = {Folmer et al. - 2022 - High-Level Synthesis of Digital Circuits from Temp.pdf:/home/mrl/.local/share/zotero/storage/5JSW6MAL/Folmer et al. - 2022 - High-Level Synthesis of Digital Circuits from Temp.pdf:application/pdf},
 }
 
 @article{materzok_generating_2022,
-       title = {Generating {Circuits} with {Generators}},
+       title = {Generating Circuits with Generators},
        volume = {6},
        doi = {10.1145/3549821},
-       abstract = {The most widely used languages and methods used for designing digital hardware fall into two rough categories. One of them, register transfer level (RTL), requires specifying each and every component in the designed circuit. This gives the designer full control, but burdens the designer with many trivial details. The other, the high-level synthesis (HLS) method, allows the designer to abstract the details of hardware away and focus on the problem being solved. This method however cannot be used for a class of hardware design problems because the circuit's clock is also abstracted away. We present YieldFSM, a hardware description language that uses the generator abstraction to represent clock-level timing in a digital circuit. It represents a middle ground between the RTL and HLS approaches: the abstraction level is higher than in RTL, but thanks to explicit information about clock-level timing, it can be used in applications where RTL is traditionally used. We also present the YieldFSM compiler, which uses methods developed by the functional programming community – including continuation-passsing style translation and defunctionalization – to translate YieldFSM programs to Mealy machines. It is implemented using Template Haskell and the Clash functional hardware description language. We show that this approach leads to short and conceptually simple hardware descriptions.},
-       number = {ICFP},
-       journal = {Proc. ACM Program. Lang.},
+       abstract = {The most widely used languages and methods used for designing digital hardware fall into two rough categories. One of them, register transfer level ({RTL}), requires specifying each and every component in the designed circuit. This gives the designer full control, but burdens the designer with many trivial details. The other, the high-level synthesis ({HLS}) method, allows the designer to abstract the details of hardware away and focus on the problem being solved. This method however cannot be used for a class of hardware design problems because the circuit's clock is also abstracted away. We present {YieldFSM}, a hardware description language that uses the generator abstraction to represent clock-level timing in a digital circuit. It represents a middle ground between the {RTL} and {HLS} approaches: the abstraction level is higher than in {RTL}, but thanks to explicit information about clock-level timing, it can be used in applications where {RTL} is traditionally used. We also present the {YieldFSM} compiler, which uses methods developed by the functional programming community – including continuation-passsing style translation and defunctionalization – to translate {YieldFSM} programs to Mealy machines. It is implemented using Template Haskell and the Clash functional hardware description language. We show that this approach leads to short and conceptually simple hardware descriptions.},
+       issue = {{ICFP}},
+       journaltitle = {Proc. {ACM} Program. Lang.},
        author = {Materzok, Marek},
-       month = aug,
-       year = {2022},
-       note = {Place: New York, NY, USA
-Publisher: ACM},
+       date = {2022-08},
+       note = {Place: New York, {NY}, {USA}
+Publisher: {ACM}},
        keywords = {circuit synthesis, generators, hardware description languages},
        file = {Materzok - 2022 - Generating Circuits with Generators.pdf:/home/mrl/.local/share/zotero/storage/LH4Q8J73/Materzok - 2022 - Generating Circuits with Generators.pdf:application/pdf},
 }
 
 @article{egi_embedding_2022,
-       title = {Embedding {Non}-linear {Pattern} {Matching} with {Backtracking} for {Non}-free {Data} {Types} into {Haskell}},
+       title = {Embedding Non-linear Pattern Matching with Backtracking for Non-free Data Types into Haskell},
        volume = {40},
        issn = {1882-7055},
        doi = {10.1007/s00354-022-00177-z},
-       abstract = {Pattern matching is an important language construct for data abstraction. Many pattern-match extensions have been developed for extending the range of data types to which pattern matching is applicable. Among them, the pattern-match system proposed by Egi and Nishiwaki features practical pattern matching for non-free data types by providing a user-customizable non-linear pattern-match facility with backtracking. However, they implemented their proposal only in dynamically typed programming languages, and there were no proposals that allow programmers to benefit from both static type systems and expressive pattern matching. This paper proposes a method for implementing this pattern-match facility by meta-programming in Haskell. There are two technical challenges: (i) we need to design a set of typing rules for the pattern-match facility; (ii) we need to embed these typing rules in Haskell to make types of the pattern-match expressions inferable by the Haskell type system. We propose a set of typing rules and show that several GHC extensions, such as multi-parameter type classes, datatype promotion, GADTs, existential types, and view patterns, play essential roles for embedding these typing rules into Haskell. The implementation has already been distributed as a Haskell library miniEgison via Hackage.},
+       abstract = {Pattern matching is an important language construct for data abstraction. Many pattern-match extensions have been developed for extending the range of data types to which pattern matching is applicable. Among them, the pattern-match system proposed by Egi and Nishiwaki features practical pattern matching for non-free data types by providing a user-customizable non-linear pattern-match facility with backtracking. However, they implemented their proposal only in dynamically typed programming languages, and there were no proposals that allow programmers to benefit from both static type systems and expressive pattern matching. This paper proposes a method for implementing this pattern-match facility by meta-programming in Haskell. There are two technical challenges: (i) we need to design a set of typing rules for the pattern-match facility; (ii) we need to embed these typing rules in Haskell to make types of the pattern-match expressions inferable by the Haskell type system. We propose a set of typing rules and show that several {GHC} extensions, such as multi-parameter type classes, datatype promotion, {GADTs}, existential types, and view patterns, play essential roles for embedding these typing rules into Haskell. The implementation has already been distributed as a Haskell library {miniEgison} via Hackage.},
+       pages = {481--506},
        number = {2},
-       journal = {New Generation Computing},
+       journaltitle = {New Generation Computing},
+       shortjournal = {New Generation Computing},
        author = {Egi, Satoshi and Kawata, Akira and Kori, Mayuko and Ogawa, Hiromi},
-       month = jul,
-       year = {2022},
-       pages = {481--506},
+       date = {2022-07-01},
        file = {Egi et al. - 2022 - Embedding Non-linear Pattern Matching with Backtra.pdf:/home/mrl/.local/share/zotero/storage/PXT9L9Z4/Egi et al. - 2022 - Embedding Non-linear Pattern Matching with Backtra.pdf:application/pdf},
 }
 
 @inproceedings{blanchette_liquid_2022,
-       address = {New York, NY, USA},
-       series = {Haskell 2022},
-       title = {Liquid {Proof} {Macros}},
+       location = {New York, {NY}, {USA}},
+       title = {Liquid Proof Macros},
        isbn = {978-1-4503-9438-3},
        doi = {10.1145/3546189.3549921},
-       abstract = {Liquid Haskell is a popular verifier for Haskell programs, leveraging the power of SMT solvers to ease users' burden of proof. However, this power does not come without a price: convincing Liquid Haskell that a program is correct often necessitates giving hints to the underlying solver, which can be a tedious and verbose process that sometimes requires intricate knowledge of Liquid Haskell's inner workings. In this paper, we present Liquid Proof Macros, an extensible metaprogramming technique and framework for simplifying the development of Liquid Haskell proofs. We describe how to leverage Template Haskell to generate Liquid Haskell proof terms, via a tactic-inspired DSL interface for more concise and user-friendly proofs, and we demonstrate the capabilities of this framework by automating a wide variety of proofs from an existing Liquid Haskell benchmark.},
-       booktitle = {Proceedings of the 15th {ACM} {SIGPLAN} {International} {Haskell} {Symposium}},
-       publisher = {ACM},
+       series = {Haskell 2022},
+       abstract = {Liquid Haskell is a popular verifier for Haskell programs, leveraging the power of {SMT} solvers to ease users' burden of proof. However, this power does not come without a price: convincing Liquid Haskell that a program is correct often necessitates giving hints to the underlying solver, which can be a tedious and verbose process that sometimes requires intricate knowledge of Liquid Haskell's inner workings. In this paper, we present Liquid Proof Macros, an extensible metaprogramming technique and framework for simplifying the development of Liquid Haskell proofs. We describe how to leverage Template Haskell to generate Liquid Haskell proof terms, via a tactic-inspired {DSL} interface for more concise and user-friendly proofs, and we demonstrate the capabilities of this framework by automating a wide variety of proofs from an existing Liquid Haskell benchmark.},
+       pages = {27--38},
+       booktitle = {Proceedings of the 15th {ACM} {SIGPLAN} International Haskell Symposium},
+       publisher = {{ACM}},
        author = {Blanchette, Henry and Vazou, Niki and Lampropoulos, Leonidas},
-       year = {2022},
+       date = {2022},
        note = {event-place: Ljubljana, Slovenia},
        keywords = {Liquid Haskell, Proof Macros, Tactics},
-       pages = {27--38},
        file = {Blanchette et al. - 2022 - Liquid Proof Macros.pdf:/home/mrl/.local/share/zotero/storage/YXPCWQNI/Blanchette et al. - 2022 - Liquid Proof Macros.pdf:application/pdf},
 }
 
-@phdthesis{baaij_digital_2015,
-       address = {Netherlands},
-       type = {{PhD} {Thesis}},
+@thesis{baaij_digital_2015,
+       location = {Netherlands},
        title = {Digital circuit in {C$\lambda$aSH}: functional specifications and type-directed synthesis},
-       abstract = {Over the last three decades, the number of transistors used in microchips has increased by three orders of magnitude, from millions to billions. The productivity of the designers, however, lags behind. Managing to implement complex algorithms, while keeping non-functional properties within desired bounds, and thoroughly verifying the design against its specification, are the main difficulties in circuit design. As a motivation for our work we make a qualitative analysis of the tools available to circuit designers. Here we see that progress has been slow, and that the same techniques have been used for over 20 years. We claim that functional languages can be used to raise the abstraction level in circuit design. Especially higher-order functional languages, where functions are first-class and can be manipulated by other functions, offer a single abstraction mechanism that can capture many design patterns. This thesis explores the idea of using the functional language Haskell directly as a hardware specification language, and move beyond the limitations of embedded languages. Additionally, we can use normal functions from existing Haskell libraries to model the behaviour of our circuits. This thesis describes the inner workings of our C$\lambda$aSH compiler, which translates the aforementioned circuit descriptions written in Haskell to low-level descriptions in VHDL. The challenge then becomes the reduction of the higher-level abstractions in the descriptions to a form where synthesis is feasible. This thesis describes a term rewrite system (with bound variables) to achieve this reduction. We prove that this term rewrite system always reduces a polymorphic, higher-order circuit description to a synthesisable variant. Even when descriptions use high-level abstractions, the C$\lambda$aSH compiler can synthesize efficient circuits. Case studies show that circuits designed in Haskell, and synthesized with the C?aSH compiler, are on par with hand-written VHDL, in both area and gate propagation delay. This thesis thus shows the merits of using a modern functional language for circuit design. The advanced type system and higher-order functions allow us to design circuits that have the desired property of being correct-by-construction. Finally, our synthesis approach enables us to derive efficient circuits from descriptions that use high-level abstractions.},
-       language = {Undefined},
-       school = {University of Twente},
+       abstract = {Over the last three decades, the number of transistors used in microchips has increased by three orders of magnitude, from millions to billions. The productivity of the designers, however, lags behind. Managing to implement complex algorithms, while keeping non-functional properties within desired bounds, and thoroughly verifying the design against its specification, are the main difficulties in circuit design. As a motivation for our work we make a qualitative analysis of the tools available to circuit designers. Here we see that progress has been slow, and that the same techniques have been used for over 20 years. We claim that functional languages can be used to raise the abstraction level in circuit design. Especially higher-order functional languages, where functions are first-class and can be manipulated by other functions, offer a single abstraction mechanism that can capture many design patterns. This thesis explores the idea of using the functional language Haskell directly as a hardware specification language, and move beyond the limitations of embedded languages. Additionally, we can use normal functions from existing Haskell libraries to model the behaviour of our circuits. This thesis describes the inner workings of our {C$\lambda$aSH} compiler, which translates the aforementioned circuit descriptions written in Haskell to low-level descriptions in {VHDL}. The challenge then becomes the reduction of the higher-level abstractions in the descriptions to a form where synthesis is feasible. This thesis describes a term rewrite system (with bound variables) to achieve this reduction. We prove that this term rewrite system always reduces a polymorphic, higher-order circuit description to a synthesisable variant. Even when descriptions use high-level abstractions, the {C$\lambda$aSH} compiler can synthesize efficient circuits. Case studies show that circuits designed in Haskell, and synthesized with the C?{aSH} compiler, are on par with hand-written {VHDL}, in both area and gate propagation delay. This thesis thus shows the merits of using a modern functional language for circuit design. The advanced type system and higher-order functions allow us to design circuits that have the desired property of being correct-by-construction. Finally, our synthesis approach enables us to derive efficient circuits from descriptions that use high-level abstractions.},
+       institution = {University of Twente},
+       type = {phdthesis},
        author = {Baaij, C. P. R.},
-       month = jan,
-       year = {2015},
+       date = {2015-01-23},
        doi = {10.3990/1.9789036538039},
-       note = {ISBN: 978-90-365-3803-9},
-       keywords = {Haskell, Digital Circuits, EC Grant Agreement nr.: FP7/248465, EC Grant Agreement nr.: FP7/610686, EWI-23939, FPGA, Functional Programming, Hardware, IR-93962, Lambda calculus, METIS-308711, Rewrite Systems},
+       note = {{ISBN}: 978-90-365-3803-9},
+       keywords = {Haskell, Digital Circuits, {EC} Grant Agreement nr.: {FP}7/248465, {EC} Grant Agreement nr.: {FP}7/610686, {EWI}-23939, {FPGA}, Functional Programming, Hardware, {IR}-93962, Lambda calculus, {METIS}-308711, Rewrite Systems},
        file = {Baaij - 2015 - Digital circuit in C$\lambda$aSH functional specification.pdf:/home/mrl/.local/share/zotero/storage/MYJ33ISL/Baaij - 2015 - Digital circuit in C$\lambda$aSH functional specification.pdf:application/pdf},
 }
 
 @inproceedings{mcdonell_embedded_2022,
-       address = {New York, NY, USA},
-       series = {Haskell 2022},
-       title = {Embedded {Pattern} {Matching}},
+       location = {New York, {NY}, {USA}},
+       title = {Embedded Pattern Matching},
        isbn = {978-1-4503-9438-3},
        doi = {10.1145/3546189.3549917},
+       series = {Haskell 2022},
        abstract = {Haskell is a popular choice for hosting deeply embedded languages. A recurring challenge for these embeddings is how to seamlessly integrate user defined algebraic data types. In particular, one important, convenient, and expressive feature for creating and inspecting data—pattern matching—is not directly available on embedded terms. We present a novel technique, embedded pattern matching, which enables a natural and user friendly embedding of user defined algebraic data types into the embedded language, and allows programmers to pattern match on terms in the embedded language in much the same way they would in the host language.},
-       booktitle = {Proceedings of the 15th {ACM} {SIGPLAN} {International} {Haskell} {Symposium}},
-       publisher = {ACM},
-       author = {McDonell, Trevor L. and Meredith, Joshua D. and Keller, Gabriele},
-       year = {2022},
-       note = {event-place: Ljubljana, Slovenia},
-       keywords = {algebraic data types, embedded languages, Haskell, pattern matching},
        pages = {123--136},
+       booktitle = {Proceedings of the 15th {ACM} {SIGPLAN} International Haskell Symposium},
+       publisher = {{ACM}},
+       author = {{McDonell}, Trevor L. and Meredith, Joshua D. and Keller, Gabriele},
+       date = {2022},
+       note = {event-place: Ljubljana, Slovenia},
+       keywords = {Haskell, algebraic data types, embedded languages, pattern matching},
        file = {2108.13114.pdf:/home/mrl/.local/share/zotero/storage/AJAT8AXI/2108.13114.pdf:application/pdf},
 }
 
-@phdthesis{krishnamurthi_linguistic_2001,
-       address = {Houston, USA},
-       type = {{PhD} {Thesis}},
+@thesis{krishnamurthi_linguistic_2001,
+       location = {Houston, {USA}},
        title = {Linguistic reuse},
-       school = {Rice University},
+       pagetotal = {119},
+       institution = {Rice University},
+       type = {phdthesis},
        author = {Krishnamurthi, Shriram},
-       year = {2001},
+       date = {2001},
        file = {Krishnamurthi - 2001 - Linguistic reuse.PDF:/home/mrl/.local/share/zotero/storage/LSKHFPIS/Krishnamurthi - 2001 - Linguistic reuse.PDF:application/pdf},
 }
 
-@misc{ashton_internet_1999,
-       address = {London, UK},
+@unpublished{ashton_internet_1999,
+       location = {London, {UK}},
+       title = {Internet of Things},
        type = {Presentation},
-       title = {Internet of {Things}},
+       howpublished = {Presentation},
+       note = {Proctor \& Gamble},
        author = {Ashton, Kevin},
-       year = {1999},
-       note = {Presentation at Proctor \& Gamble},
+       date = {1999},
 }
 
 @article{ashton_that_2009,
-       title = {That ‘{Internet} of {Things}’ {Thing}},
+       title = {That ‘Internet of Things’ Thing},
        volume = {22},
+       pages = {97--114},
        number = {7},
-       journal = {RFID journal},
+       journaltitle = {{RFID} journal},
        author = {Ashton, Kevin},
-       year = {2009},
+       date = {2009},
        note = {Publisher: Hauppauge, New York},
-       pages = {97--114},
        file = {Ashton - 2009 - That ‘Internet of Things’ Thing.pdf:/home/mrl/.local/share/zotero/storage/SJ33G6VR/Ashton - 2009 - That ‘Internet of Things’ Thing.pdf:application/pdf},
 }
 
-@phdthesis{van_gemert_task_2022,
-       address = {Nijmegen},
-       type = {Bachelor's {Thesis}},
-       title = {Task {Oriented} {Programming} in {LUA}},
-       language = {en},
-       school = {Radboud University},
+@thesis{van_gemert_task_2022,
+       location = {Nijmegen},
+       title = {Task Oriented Programming in {LUA}},
+       pagetotal = {63},
+       institution = {Radboud University},
+       type = {Bachelor's Thesis},
        author = {van Gemert, Dante},
-       year = {2022},
+       date = {2022},
+       langid = {english},
        file = {van Gemert - 2022 - Task Oriented Programming in LUA.pdf:/home/mrl/.local/share/zotero/storage/UQHAWT83/van Gemert - 2022 - Task Oriented Programming in LUA.pdf:application/pdf},
 }
 
-@misc{lijnse_toppyt_2022,
+@software{lijnse_toppyt_2022,
        title = {Toppyt},
        url = {https://gitlab.com/baslijnse/toppyt},
-       urldate = {2022-10-07},
        author = {Lijnse, Bas},
-       year = {2022},
+       urldate = {2022-10-07},
+       date = {2022},
 }
 
 @article{kiselyov_implementing_2011,
-       title = {Implementing {Explicit} and {Finding} {Implicit} {Sharing} in {Embedded} {DSLs}},
+       title = {Implementing Explicit and Finding Implicit Sharing in Embedded {DSLs}},
        volume = {66},
        doi = {10.4204/eptcs.66.11},
-       journal = {Electronic Proceedings in Theoretical Computer Science},
+       pages = {210--225},
+       journaltitle = {Electronic Proceedings in Theoretical Computer Science},
        author = {Kiselyov, Oleg},
-       month = sep,
-       year = {2011},
+       date = {2011-09},
        note = {Publisher: Open Publishing Association},
-       pages = {210--225},
 }
 
 @article{sun_compositional_2022,
-       title = {Compositional {Embeddings} of {Domain}-{Specific} {Languages}},
+       title = {Compositional Embeddings of Domain-Specific Languages},
        volume = {6},
        doi = {10.1145/3563294},
-       language = {en},
-       number = {OOPSLA2},
-       journal = {Proc. ACM Program. Lang.},
-       author = {Sun, Yaozhu and Dhandhania, Utkarsh and Oliveira, Bruno C. d. S.},
-       year = {2022},
        pages = {34},
+       issue = {{OOPSLA}2},
+       journaltitle = {Proc. {ACM} Program. Lang.},
+       author = {Sun, Yaozhu and Dhandhania, Utkarsh and Oliveira, Bruno C. d. S.},
+       date = {2022},
+       langid = {english},
        file = {Sun and Dhandhania - Compositional Embeddings of Domain-Specific Langua.pdf:/home/mrl/.local/share/zotero/storage/Y4GADQFP/Sun and Dhandhania - Compositional Embeddings of Domain-Specific Langua.pdf:application/pdf},
 }
 
-@misc{lubbers_htask_2022,
+@software{lubbers_htask_2022,
        title = {{hTask}},
        url = {https://gitlab.com/mlubbers/hTask},
-       urldate = {2022-10-07},
        author = {Lubbers, Mart},
-       year = {2022},
+       urldate = {2022-10-07},
+       date = {2022},
 }
 
 @article{nizetic_internet_2020,
-       title = {Internet of {Things} ({IoT}): {Opportunities}, issues and challenges towards a smart and sustainable future},
+       title = {Internet of Things ({IoT}): Opportunities, issues and challenges towards a smart and sustainable future},
        volume = {274},
        issn = {0959-6526},
        doi = {https://doi.org/10.1016/j.jclepro.2020.122877},
-       abstract = {The rapid development and implementation of smart and IoT (Internet of Things) based technologies have allowed for various possibilities in technological advancements for different aspects of life. The main goal of IoT technologies is to simplify processes in different fields, to ensure a better efficiency of systems (technologies or specific processes) and finally to improve life quality. Sustainability has become a key issue for population where the dynamic development of IoT technologies is bringing different useful benefits, but this fast development must be carefully monitored and evaluated from an environmental point of view to limit the presence of harmful impacts and ensure the smart utilization of limited global resources. Significant research efforts are needed in the previous sense to carefully investigate the pros and cons of IoT technologies. This review editorial is partially directed on the research contributions presented at the 4th International Conference on Smart and Sustainable Technologies held in Split and Bol, Croatia, in 2019 (SpliTech 2019) as well as on recent findings from literature. The SpliTech2019 conference was a valuable event that successfully linked different engineering professions, industrial experts and finally researchers from academia. The focus of the conference was directed towards key conference tracks such as Smart City, Energy/Environment, e-Health and Engineering Modelling. The research presented and discussed at the SpliTech2019 conference helped to understand the complex and intertwined effects of IoT technologies on societies and their potential effects on sustainability in general. Various application areas of IoT technologies were discussed as well as the progress made. Four main topical areas were discussed in the herein editorial, i.e. latest advancements in the further fields: (i) IoT technologies in Sustainable Energy and Environment, (ii) IoT enabled Smart City, (iii) E-health – Ambient assisted living systems (iv) IoT technologies in Transportation and Low Carbon Products. The main outcomes of the review introductory article contributed to the better understanding of current technological progress in IoT application areas as well as the environmental implications linked with the increased application of IoT products.},
-       journal = {Journal of Cleaner Production},
-       author = {Ni\v{z}eti\'{c}, Sandro and \v{S}oli\'{c}, Petar and Gonz\'{a}lez-de-Artaza, Diego L\'{o}pez-de-Ipiña and Patrono, Luigi},
-       year = {2020},
-       keywords = {IoT, Energy, Environment, Smart city, SpliTech2020, Sustainability},
+       abstract = {The rapid development and implementation of smart and {IoT} (Internet of Things) based technologies have allowed for various possibilities in technological advancements for different aspects of life. The main goal of {IoT} technologies is to simplify processes in different fields, to ensure a better efficiency of systems (technologies or specific processes) and finally to improve life quality. Sustainability has become a key issue for population where the dynamic development of {IoT} technologies is bringing different useful benefits, but this fast development must be carefully monitored and evaluated from an environmental point of view to limit the presence of harmful impacts and ensure the smart utilization of limited global resources. Significant research efforts are needed in the previous sense to carefully investigate the pros and cons of {IoT} technologies. This review editorial is partially directed on the research contributions presented at the 4th International Conference on Smart and Sustainable Technologies held in Split and Bol, Croatia, in 2019 ({SpliTech} 2019) as well as on recent findings from literature. The {SpliTech}2019 conference was a valuable event that successfully linked different engineering professions, industrial experts and finally researchers from academia. The focus of the conference was directed towards key conference tracks such as Smart City, Energy/Environment, e-Health and Engineering Modelling. The research presented and discussed at the {SpliTech}2019 conference helped to understand the complex and intertwined effects of {IoT} technologies on societies and their potential effects on sustainability in general. Various application areas of {IoT} technologies were discussed as well as the progress made. Four main topical areas were discussed in the herein editorial, i.e. latest advancements in the further fields: (i) {IoT} technologies in Sustainable Energy and Environment, (ii) {IoT} enabled Smart City, (iii) E-health – Ambient assisted living systems (iv) {IoT} technologies in Transportation and Low Carbon Products. The main outcomes of the review introductory article contributed to the better understanding of current technological progress in {IoT} application areas as well as the environmental implications linked with the increased application of {IoT} products.},
        pages = {122877},
+       journaltitle = {Journal of Cleaner Production},
+       author = {Nižetić, Sandro and Šolić, Petar and González-de-Artaza, Diego López-de-Ipiña and Patrono, Luigi},
+       date = {2020},
+       keywords = {{IoT}, Energy, Environment, Smart city, {SpliTech}2020, Sustainability},
 }
 
 @article{shi_edge_2016,
-       title = {Edge {Computing}: {Vision} and {Challenges}},
+       title = {Edge Computing: Vision and Challenges},
        volume = {3},
        doi = {10.1109/JIOT.2016.2579198},
+       pages = {637--646},
        number = {5},
-       journal = {IEEE Internet of Things Journal},
+       journaltitle = {{IEEE} Internet of Things Journal},
        author = {Shi, Weisong and Cao, Jie and Zhang, Quan and Li, Youhuizi and Xu, Lanyu},
-       year = {2016},
-       pages = {637--646},
+       date = {2016},
        file = {Shi et al. - 2016 - Edge Computing Vision and Challenges.pdf:/home/mrl/.local/share/zotero/storage/3F2LDVWM/Shi et al. - 2016 - Edge Computing Vision and Challenges.pdf:application/pdf},
 }
 
 @article{sanchez-iborra_tinyml-enabled_2020,
-       title = {{TinyML}-{Enabled} {Frugal} {Smart} {Objects}: {Challenges} and {Opportunities}},
+       title = {{TinyML}-Enabled Frugal Smart Objects: Challenges and Opportunities},
        volume = {20},
        doi = {10.1109/MCAS.2020.3005467},
+       pages = {4--18},
        number = {3},
-       journal = {IEEE Circuits and Systems Magazine},
+       journaltitle = {{IEEE} Circuits and Systems Magazine},
        author = {Sanchez-Iborra, Ramon and Skarmeta, Antonio F.},
-       year = {2020},
-       pages = {4--18},
+       date = {2020},
        file = {Sanchez-Iborra and Skarmeta - 2020 - TinyML-Enabled Frugal Smart Objects Challenges an.pdf:/home/mrl/.local/share/zotero/storage/G5DKVFE4/Sanchez-Iborra and Skarmeta - 2020 - TinyML-Enabled Frugal Smart Objects Challenges an.pdf:application/pdf},
 }
 
 @inproceedings{koopman_dynamic_2021,
-       address = {Cham},
-       title = {Dynamic {Editors} for {Well}-{Typed} {Expressions}},
+       location = {Cham},
+       title = {Dynamic Editors for Well-Typed Expressions},
        isbn = {978-3-030-83978-9},
-       abstract = {Interactive systems may require complex inputs. Domain experts prefer guidance in the construction of these inputs. An ideal system prevents errors and is flexible in the construction and changes of its input. The iTask system generates web-editors given any first-order algebraic data types. The generated web-editors are useful but have their limitations. It is not possible to combine type safety with overloaded operators and preventing unbounded or ill-typed identifiers is impossible. Using phantom types, generalized algebraic datatypes or functions solves the language problems, but they cannot be handled by the datatype generic system. Moreover, changing expressions can require re-entering large parts of the input. We present dynamic editors that can solve all those problems. The programmer specifies the elements of such an editor by functions. The system shows the applicable edit elements in a drop-down menu to the user. The dynamic editor is used recursively to create the arguments for the selected function. Dynamic editors are seamlessly integrated with the ordinary web-editors of the iTask system. The obtained editors guide the users to make correct and type-safe inputs. These editors can be very flexible as well without making strange abstract syntax trees.},
-       booktitle = {Trends in {Functional} {Programming}},
+       abstract = {Interactive systems may require complex inputs. Domain experts prefer guidance in the construction of these inputs. An ideal system prevents errors and is flexible in the construction and changes of its input. The {iTask} system generates web-editors given any first-order algebraic data types. The generated web-editors are useful but have their limitations. It is not possible to combine type safety with overloaded operators and preventing unbounded or ill-typed identifiers is impossible. Using phantom types, generalized algebraic datatypes or functions solves the language problems, but they cannot be handled by the datatype generic system. Moreover, changing expressions can require re-entering large parts of the input. We present dynamic editors that can solve all those problems. The programmer specifies the elements of such an editor by functions. The system shows the applicable edit elements in a drop-down menu to the user. The dynamic editor is used recursively to create the arguments for the selected function. Dynamic editors are seamlessly integrated with the ordinary web-editors of the {iTask} system. The obtained editors guide the users to make correct and type-safe inputs. These editors can be very flexible as well without making strange abstract syntax trees.},
+       pages = {44--66},
+       booktitle = {Trends in Functional Programming},
        publisher = {Springer International Publishing},
        author = {Koopman, Pieter and Michels, Steffen and Plasmeijer, Rinus},
-       editor = {Zs\'{o}k, Vikt\'{o}ria and Hughes, John},
-       year = {2021},
-       pages = {44--66},
+       editor = {Zsók, Viktória and Hughes, John},
+       date = {2021},
        file = {978-3-030-83978-9_3.pdf:/home/mrl/.local/share/zotero/storage/6654TJL7/978-3-030-83978-9_3.pdf:application/pdf},
 }
 
 @inproceedings{omar_hazelnut_2017,
-       address = {New York, NY, USA},
-       series = {{POPL} '17},
-       title = {Hazelnut: {A} {Bidirectionally} {Typed} {Structure} {Editor} {Calculus}},
+       location = {New York, {NY}, {USA}},
+       title = {Hazelnut: A Bidirectionally Typed Structure Editor Calculus},
        isbn = {978-1-4503-4660-3},
        doi = {10.1145/3009837.3009900},
+       series = {{POPL} '17},
        abstract = {Structure editors allow programmers to edit the tree structure of a program directly. This can have cognitive benefits, particularly for novice and end-user programmers. It also simplifies matters for tool designers, because they do not need to contend with malformed program text. This paper introduces Hazelnut, a structure editor based on a small bidirectionally typed lambda calculus extended with holes and a cursor. Hazelnut goes one step beyond syntactic well-formedness: its edit actions operate over statically meaningful incomplete terms. Naïvely, this would force the programmer to construct terms in a rigid "outside-in" manner. To avoid this problem, the action semantics automatically places terms assigned a type that is inconsistent with the expected type inside a hole. This meaningfully defers the type consistency check until the term inside the hole is finished. Hazelnut is not intended as an end-user tool itself. Instead, it serves as a foundational account of typed structure editing. To that end, we describe how Hazelnut's rich metatheory, which we have mechanized using the Agda proof assistant, serves as a guide when we extend the calculus to include binary sum types. We also discuss various interpretations of holes, and in so doing reveal connections with gradual typing and contextual modal type theory, the Curry-Howard interpretation of contextual modal logic. Finally, we discuss how Hazelnut's semantics lends itself to implementation as an event-based functional reactive program. Our simple reference implementation is written using js\_of\_ocaml.},
-       booktitle = {Proceedings of the 44th {ACM} {SIGPLAN} {Symposium} on {Principles} of {Programming} {Languages}},
-       publisher = {ACM},
+       pages = {86--99},
+       booktitle = {Proceedings of the 44th {ACM} {SIGPLAN} Symposium on Principles of Programming Languages},
+       publisher = {{ACM}},
        author = {Omar, Cyrus and Voysey, Ian and Hilton, Michael and Aldrich, Jonathan and Hammer, Matthew A.},
-       year = {2017},
+       date = {2017},
        note = {event-place: Paris, France},
        keywords = {bidirectional type systems, gradual typing, mechanized metatheory, structure editors},
-       pages = {86--99},
        file = {Omar et al. - 2017 - Hazelnut A Bidirectionally Typed Structure Editor.pdf:/home/mrl/.local/share/zotero/storage/4DNRBZ4H/Omar et al. - 2017 - Hazelnut A Bidirectionally Typed Structure Editor.pdf:application/pdf},
 }
 
 @article{hester_batteries_2019,
-       title = {Batteries {Not} {Included}},
+       title = {Batteries Not Included},
        volume = {26},
        issn = {1528-4972},
        doi = {10.1145/3351474},
        abstract = {Getting things done amid frequent power failures, batteryless intermittent research is rethinking how we build computing systems and paving the way to a sustainable and scalable digital future. The next trillion devices might be a little weird.},
+       pages = {23--27},
        number = {1},
-       journal = {XRDS},
+       journaltitle = {{XRDS}},
        author = {Hester, Josiah and Sorber, Jacob},
-       month = sep,
-       year = {2019},
-       note = {Place: New York, NY, USA
-Publisher: ACM},
-       pages = {23--27},
+       date = {2019-09},
+       note = {Place: New York, {NY}, {USA}
+Publisher: {ACM}},
        file = {Hester and Sorber - 2019 - Batteries Not Included.pdf:/home/mrl/.local/share/zotero/storage/LT53WV8K/Hester and Sorber - 2019 - Batteries Not Included.pdf:application/pdf},
 }
 
 @incollection{management_association_evaluating_2014,
-       address = {Hershey, PA, USA},
-       title = {Evaluating the {Usability} of {Domain}-{Specific} {Languages}},
+       location = {Hershey, {PA}, {USA}},
+       title = {Evaluating the Usability of Domain-Specific Languages},
        isbn = {978-1-4666-4301-7},
-       abstract = {Domain-Specific Languages (DSLs) can be regarded as User Interfaces (UIs) because they bridge the gap between the domain experts and the computation platforms. Usability of DSLs by domain experts is a key factor for their successful adoption. The few reports supporting improvement claims are persuasive, but mostly anecdotal. Systematic literature reviews show that evidences on the effects of the introduction of DSLs are actually very scarce. In particular, the evaluation of usability is often skipped, relaxed, or at least omitted from papers reporting the development of DSLs. The few exceptions mostly take place at the end of the development process, when fixing problems is already too expensive. A systematic approach, based on techniques for the experimental evaluation of UIs, should be used to assess suitability of new DSLs. This chapter presents a general experimental evaluation model, tailored for DSLs’ experimental evaluation, and instantiates it in several DSL’s evaluation examples.},
-       booktitle = {Software {Design} and {Development}: {Concepts}, {Methodologies}, {Tools}, and {Applications}},
-       publisher = {IGI Global},
-       author = {Bari\v{s}ic, Ankica and Amaral, Vasco and Goul\~{a}o, Miguel and Barroca, Bruno},
+       abstract = {Domain-Specific Languages ({DSLs}) can be regarded as User Interfaces ({UIs}) because they bridge the gap between the domain experts and the computation platforms. Usability of {DSLs} by domain experts is a key factor for their successful adoption. The few reports supporting improvement claims are persuasive, but mostly anecdotal. Systematic literature reviews show that evidences on the effects of the introduction of {DSLs} are actually very scarce. In particular, the evaluation of usability is often skipped, relaxed, or at least omitted from papers reporting the development of {DSLs}. The few exceptions mostly take place at the end of the development process, when fixing problems is already too expensive. A systematic approach, based on techniques for the experimental evaluation of {UIs}, should be used to assess suitability of new {DSLs}. This chapter presents a general experimental evaluation model, tailored for {DSLs}’ experimental evaluation, and instantiates it in several {DSL}’s evaluation examples.},
+       pages = {2120--2141},
+       booktitle = {Software Design and Development: Concepts, Methodologies, Tools, and Applications},
+       publisher = {{IGI} Global},
+       author = {Barišic, Ankica and Amaral, Vasco and Goulão, Miguel and Barroca, Bruno},
        editor = {Management Association, Information Resources},
-       year = {2014},
+       date = {2014},
        doi = {10.4018/978-1-4666-4301-7.ch098},
-       pages = {2120--2141},
+       file = {Barišic et al. - 2014 - Evaluating the Usability of Domain-Specific Langua.pdf:/home/mrl/.local/share/zotero/storage/ARTGSHZK/Barišic et al. - 2014 - Evaluating the Usability of Domain-Specific Langua.pdf:application/pdf},
 }
 
 @article{van_der_aalst_workflow_2003,
-       title = {Workflow {Patterns}},
+       title = {Workflow Patterns},
        volume = {14},
        issn = {1573-7578},
        doi = {10.1023/A:1022883727209},
        abstract = {Differences in features supported by the various contemporary commercial workflow management systems point to different insights of suitability and different levels of expressive power. The challenge, which we undertake in this paper, is to systematically address workflow requirements, from basic to complex. Many of the more complex requirements identified, recur quite frequently in the analysis phases of workflow projects, however their implementation is uncertain in current products. Requirements for workflow languages are indicated through workflow patterns. In this context, patterns address business requirements in an imperative workflow style expression, but are removed from specific workflow languages. The paper describes a number of workflow patterns addressing what we believe identify comprehensive workflow functionality. These patterns provide the basis for an in-depth comparison of a number of commercially availablework flow management systems. As such, this paper can be seen as the academic response to evaluations made by prestigious consulting companies. Typically, these evaluations hardly consider the workflow modeling language and routing capabilities, and focus more on the purely technical and commercial aspects.},
-       number = {1},
-       journal = {Distributed and Parallel Databases},
-       author = {\noopsort{Aalst}{van der Aalst}, W.M.P. and \noopsort{Hofstede}{ter Hofstede}, A.H.M. and Kiepuszewski, B. and Barros, A.P.},
-       month = jul,
-       year = {2003},
        pages = {5--51},
+       number = {1},
+       journaltitle = {Distributed and Parallel Databases},
+       shortjournal = {Distributed and Parallel Databases},
+       author = {van der Aalst, W.M.P. and ter Hofstede, A.H.M. and Kiepuszewski, B. and Barros, A.P.},
+       date = {2003-07-01},
        file = {van der Aalst et al. - 2003 - Workflow Patterns.pdf:/home/mrl/.local/share/zotero/storage/WXP2T4R7/van der Aalst et al. - 2003 - Workflow Patterns.pdf:application/pdf},
 }
 
 @inproceedings{belwal_variable_2013,
-       address = {New York, NY, USA},
-       series = {{RACS} '13},
-       title = {Variable {Voltage} {Scheduling} with the {Priority}-{Based} {Functional} {Reactive} {Programming} {Language}},
+       location = {New York, {NY}, {USA}},
+       title = {Variable Voltage Scheduling with the Priority-Based Functional Reactive Programming Language},
        isbn = {978-1-4503-2348-2},
        doi = {10.1145/2513228.2513271},
-       abstract = {In this paper, we consider how energy consumption can be reduced in the Priority-based Functional Reactive Programming (P-FRP) execution model through the implementation of Dynamic Voltage and Frequency Scaling (DVFS), a technique for modifying circuit delays and altering the operating frequency of the CPU. Use of DVFS can have an impact on task execution time, which adversely affects the temporal guarantees required from the real-time scheduler. Most of the existing studies provide solutions which are suitable for the classical model of preemptive task scheduling. Tasks which are schedulable in the preemptive model cannot be guaranteed to be schedulable in P-FRP, since the abort-based preemptive approach often creates additional costs in terms of response times.},
-       booktitle = {Proceedings of the 2013 {Research} in {Adaptive} and {Convergent} {Systems}},
-       publisher = {ACM},
+       series = {{RACS} '13},
+       abstract = {In this paper, we consider how energy consumption can be reduced in the Priority-based Functional Reactive Programming (P-{FRP}) execution model through the implementation of Dynamic Voltage and Frequency Scaling ({DVFS}), a technique for modifying circuit delays and altering the operating frequency of the {CPU}. Use of {DVFS} can have an impact on task execution time, which adversely affects the temporal guarantees required from the real-time scheduler. Most of the existing studies provide solutions which are suitable for the classical model of preemptive task scheduling. Tasks which are schedulable in the preemptive model cannot be guaranteed to be schedulable in P-{FRP}, since the abort-based preemptive approach often creates additional costs in terms of response times.},
+       pages = {440--445},
+       booktitle = {Proceedings of the 2013 Research in Adaptive and Convergent Systems},
+       publisher = {{ACM}},
        author = {Belwal, Chaitanya and Cheng, Albert M. K. and Ras, J. and Wen, Yuanfeng},
-       year = {2013},
+       date = {2013},
        note = {event-place: Montreal, Quebec, Canada},
        keywords = {embedded system, real-time},
-       pages = {440--445},
 }
 
-@techreport{transforma_insights_current_2023,
-       title = {Current {IoT} {Forecast} {Highlights}},
+@report{transforma_insights_current_2023,
+       title = {Current {IoT} Forecast Highlights},
        url = {https://transformainsights.com/research/forecast/highlights},
        institution = {{Transforma Insights}},
        author = {{Transforma Insights}},
-       month = jan,
-       year = {2023},
+       urldate = {2023-01-16},
+       date = {2023},
        note = {accessed-on: 2023-01-19},
 }
 
-@misc{top_software_viia_2023,
-       title = {{VIIA} ({Vessel} {Information} {Integrating} {Application})},
+@software{top_software_viia_2023,
+       title = {{VIIA} (Vessel Information Integrating Application)},
        url = {https://www.top-software.nl/VIIA.html},
+       author = {{TOP} Software},
        urldate = {2023-02-06},
-       author = {{TOP Software}},
-       year = {2023},
+       date = {2023},
 }
 
 @article{hinze_derivable_2001,
-       title = {Derivable {Type} {Classes}},
+       title = {Derivable Type Classes},
        volume = {41},
        issn = {1571-0661},
        doi = {https://doi.org/10.1016/S1571-0661(05)80542-0},
        abstract = {Generic programming allows you to write a function once, and use it many times at different types. A lot of good foundational work on generic programming has been done. The goal of this paper is to propose a practical way of supporting generic programming within the Haskell language, without radically changing the language or its type system. The key idea is to present generic programming as a richer language in which to write default method definitions in a class declaration. On the way, we came across a separate issue, concerning type-class overloading where higher kinds are involved. We propose a simple type-class system extension to allow the programmer to write richer contexts than is currently possible.},
+       pages = {5--35},
        number = {1},
-       journal = {Electronic Notes in Theoretical Computer Science},
+       journaltitle = {Electronic Notes in Theoretical Computer Science},
        author = {Hinze, Ralf and Peyton Jones, Simon},
-       year = {2001},
-       pages = {5--35},
+       date = {2001},
        file = {Hinze and Jones - 2001 - Derivable Type Classes.pdf:/home/mrl/.local/share/zotero/storage/33IF2HMZ/Hinze and Jones - 2001 - Derivable Type Classes.pdf:application/pdf},
 }
index dcb3672..f2a3b96 100644 (file)
-@PREAMBLE{ {\providecommand{\noopsort}[2]{#2} } }
+
 @inproceedings{lubbers_interpreting_2019,
-       address = {New York, NY, USA},
-       series = {{IFL} '19},
-       title = {Interpreting {Task} {Oriented} {Programs} on {Tiny} {Computers}},
+       location = {New York, {NY}, {USA}},
+       title = {Interpreting Task Oriented Programs on Tiny Computers},
        isbn = {978-1-4503-7562-7},
        doi = {10.1145/3412932.3412936},
-       abstract = {Small Microcontroller Units (MCUs) drive the omnipresent Internet of Things (IoT). These devices are small, cheap, and energy efficient. However, they are not very powerful and lack an Operating System. Hence it is difficult to apply high level abstractions and write software that stays close to the design.Task Oriented Programming (TOP) is a paradigm for creating multi-user collaborative systems. A program consists of tasks—descriptions of what needs to be done. The tasks represent the actual work and a task value is observable during execution. Furthermore, tasks can be combined and transformed using combinators.mTask is an embedded Domain Specific Language (eDSL) to program MCUs following the TOP paradigm. Previous work has described the mTask language, a static C code generator, and how to integrate mTask with TOP servers. This paper shows that for dynamic IOT applications, tasks must be sent at runtime to the devices for interpretation. It describes in detail how to compile specialized IOT TOP tasks to bytecode and how to interpret them on devices with very little memory. These additions allow the creation of complete, dynamic IOT applications arising from a single source using a mix of iTasks and mTask tasks. Details such as serialization and communication are captured in simple abstractions.},
-       booktitle = {Proceedings of the 31st {Symposium} on {Implementation} and {Application} of {Functional} {Languages}},
-       publisher = {ACM},
+       series = {{IFL} '19},
+       abstract = {Small Microcontroller Units ({MCUs}) drive the omnipresent Internet of Things ({IoT}). These devices are small, cheap, and energy efficient. However, they are not very powerful and lack an Operating System. Hence it is difficult to apply high level abstractions and write software that stays close to the design.Task Oriented Programming ({TOP}) is a paradigm for creating multi-user collaborative systems. A program consists of tasks—descriptions of what needs to be done. The tasks represent the actual work and a task value is observable during execution. Furthermore, tasks can be combined and transformed using combinators.{mTask} is an embedded Domain Specific Language ({eDSL}) to program {MCUs} following the {TOP} paradigm. Previous work has described the {mTask} language, a static C code generator, and how to integrate {mTask} with {TOP} servers. This paper shows that for dynamic {IOT} applications, tasks must be sent at runtime to the devices for interpretation. It describes in detail how to compile specialized {IOT} {TOP} tasks to bytecode and how to interpret them on devices with very little memory. These additions allow the creation of complete, dynamic {IOT} applications arising from a single source using a mix of {iTasks} and {mTask} tasks. Details such as serialization and communication are captured in simple abstractions.},
+       eventtitle = {Symposium on Implementation and Application of Functional Languages},
+       booktitle = {Proceedings of the 31st Symposium on Implementation and Application of Functional Languages},
+       publisher = {{ACM}},
        author = {Lubbers, Mart and Koopman, Pieter and Plasmeijer, Rinus},
        editor = {Stutterheim, Jurriën and Chin, Wei Ngan},
-       year = {2019},
+       date = {2019},
        note = {event-place: Singapore, Singapore},
        keywords = {clean, distributed applications, functional programming, internet of things, task oriented programming},
        file = {Lubbers et al. - 2019 - Interpreting Task Oriented Programs on Tiny Comput.pdf:/home/mrl/.local/share/zotero/storage/ATYSJXJ3/Lubbers et al. - 2019 - Interpreting Task Oriented Programs on Tiny Comput.pdf:application/pdf},
 }
 
 @incollection{lubbers_writing_2023,
-       address = {Cham},
-       series = {Lecture {Notes} in {Computer} {Science}},
-       title = {Writing {Internet} of {Things} Applications with {Task} {Oriented} {Programming}},
-       abstract = {The Internet of Things (IOT) is growing fast. In 2018, there was approximately one connected device per person on earth and the number has been growing ever since. The devices interact with the environment via different modalities at the same time using sensors and actuators making the programs parallel. Yet, writing this type of programs is difficult because the devices have little computation power and memory, the platforms are heterogeneous and the languages are low level. Task Oriented Programming (TOP) is a novel declarative programming language paradigm that is used to express coordination of work, collaboration of users and systems, the distribution of shared data and the human computer interaction. The mTask language is a specialized, yet full-fledged, multi-backend TOP language for IOT devices. With the bytecode interpretation backend and the integration with iTasks, tasks can be executed on the device dynamically. This means that —according to the current state of affairs— tasks can be tailor-made at run time, compiled to device-agnostic bytecode and shipped to the device for interpretation. Tasks sent to the device are fully integrated in iTasks to allow every form of interaction with the tasks such as observation of the task value and interaction with Shared Data Sources (SDSs). The application is —server and devices— are programmed in a single language, albeit using two embedded Domain Specific Languages (EDSLs).},
-       language = {en},
+       location = {Cham},
+       title = {Writing Internet of Things Applications with Task Oriented Programming},
+       series = {Lecture Notes in Computer Science},
+       abstract = {The Internet of Things ({IOT}) is growing fast. In 2018, there was approximately one connected device per person on earth and the number has been growing ever since. The devices interact with the environment via different modalities at the same time using sensors and actuators making the programs parallel. Yet, writing this type of programs is difficult because the devices have little computation power and memory, the platforms are heterogeneous and the languages are low level. Task Oriented Programming ({TOP}) is a novel declarative programming language paradigm that is used to express coordination of work, collaboration of users and systems, the distribution of shared data and the human computer interaction. The {mTask} language is a specialized, yet full-fledged, multi-backend {TOP} language for {IOT} devices. With the bytecode interpretation backend and the integration with {iTasks}, tasks can be executed on the device dynamically. This means that —according to the current state of affairs— tasks can be tailor-made at run time, compiled to device-agnostic bytecode and shipped to the device for interpretation. Tasks sent to the device are fully integrated in {iTasks} to allow every form of interaction with the tasks such as observation of the task value and interaction with Shared Data Sources ({SDSs}). The application is —server and devices— are programmed in a single language, albeit using two embedded Domain Specific Languages ({EDSLs}).},
+       pages = {51},
        number = {11950},
-       booktitle = {Composability, {Comprehensibility} and {Correctness} of {Working} {Software}, 8th {Summer} {School}, {Budapest}, {Hungary}, {June} 17–21, 2019, {Revised} {Selected} {Papers}},
+       booktitle = {Composability, Comprehensibility and Correctness of Working Software, 8th Summer School, Budapest, Hungary, June 17–21, 2019, Revised Selected Papers},
        publisher = {Springer},
        author = {Lubbers, Mart and Koopman, Pieter and Plasmeijer, Rinus},
-       year = {2023},
+       date = {2023},
+       langid = {english},
        note = {in-press. preprint at: https://arxiv.org/abs/2212.04193},
-       pages = {51},
        file = {cefp.pdf:/home/mrl/.local/share/zotero/storage/VEWFI5DG/cefp.pdf:application/pdf},
 }
 
 @inproceedings{lubbers_tiered_2020,
-       address = {Malm\"{o}},
-       series = {{IoT} '20},
-       title = {Tiered versus {Tierless} {IoT} {Stacks}: {Comparing} {Smart} {Campus} {Software} {Architectures}},
+       location = {Malmö},
+       title = {Tiered versus Tierless {IoT} Stacks: Comparing Smart Campus Software Architectures},
        isbn = {978-1-4503-8758-3},
        doi = {10.1145/3410992.3411002},
-       abstract = {Internet of Things (IoT) software stacks are notoriously complex, conventionally comprising multiple tiers/components and requiring that the developer not only uses multiple programming languages, but also correctly interoperate the components. A novel alternative is to use a single tierless language with a compiler that generates the code for each component, and for their correct interoperation.We report the first ever systematic comparison of tiered and tierless IoT software architectures. The comparison is based on two implementations of a non-trivial smart campus application. PRSS has a conventional tiered Python-based architecture, and Clean Wemos Super Sensors (CWSS) has a novel tierless architecture based on Clean and the iTask and mTask embedded DSLs. An operational comparison of CWSS and PRSS demonstrates that they have equivalent functionality, and that both meet the University of Glasgow (UoG) smart campus requirements.Crucially, the tierless CWSS stack requires 70\% less code than the tiered PRSS stack. We analyse the impact of the following three main factors. (1) Tierless developers need to manage less interoperation: CWSS uses two DSLs in a single paradigm where PRSS uses five languages and three paradigms. (2) Tierless developers benefit from automatically generated, and hence correct, communication. (3) Tierless developers can exploit the powerful high-level abstractions such as Task Oriented Programming (TOP) in CWSS. A far smaller and single paradigm codebase improves software quality, dramatically reduces development time, and improves the maintainability of tierless stacks.},
-       booktitle = {Proceedings of the 10th {International} {Conference} on the {Internet} of {Things}},
-       publisher = {ACM},
+       series = {{IoT} '20},
+       abstract = {Internet of Things ({IoT}) software stacks are notoriously complex, conventionally comprising multiple tiers/components and requiring that the developer not only uses multiple programming languages, but also correctly interoperate the components. A novel alternative is to use a single tierless language with a compiler that generates the code for each component, and for their correct interoperation.We report the first ever systematic comparison of tiered and tierless {IoT} software architectures. The comparison is based on two implementations of a non-trivial smart campus application. {PRSS} has a conventional tiered Python-based architecture, and Clean Wemos Super Sensors ({CWSS}) has a novel tierless architecture based on Clean and the {iTask} and {mTask} embedded {DSLs}. An operational comparison of {CWSS} and {PRSS} demonstrates that they have equivalent functionality, and that both meet the University of Glasgow ({UoG}) smart campus requirements.Crucially, the tierless {CWSS} stack requires 70\% less code than the tiered {PRSS} stack. We analyse the impact of the following three main factors. (1) Tierless developers need to manage less interoperation: {CWSS} uses two {DSLs} in a single paradigm where {PRSS} uses five languages and three paradigms. (2) Tierless developers benefit from automatically generated, and hence correct, communication. (3) Tierless developers can exploit the powerful high-level abstractions such as Task Oriented Programming ({TOP}) in {CWSS}. A far smaller and single paradigm codebase improves software quality, dramatically reduces development time, and improves the maintainability of tierless stacks.},
+       eventtitle = {10th International Conference on the Internet of Things},
+       booktitle = {Proceedings of the 10th International Conference on the Internet of Things},
+       publisher = {{ACM}},
        author = {Lubbers, Mart and Koopman, Pieter and Ramsingh, Adrian and Singer, Jeremy and Trinder, Phil},
-       year = {2020},
-       note = {event-place: Malm\"{o}, Sweden},
+       date = {2020},
+       note = {event-place: Malmö, Sweden},
        keywords = {internet of things, domain specific languages, network reliability, software architectures},
        file = {Lubbers et al. - 2020 - Tiered versus Tierless IoT Stacks Comparing Smart.pdf:/home/mrl/.local/share/zotero/storage/YY3MJRZ6/Lubbers et al. - 2020 - Tiered versus Tierless IoT Stacks Comparing Smart.pdf:application/pdf},
 }
 
 @inproceedings{koopman_task-based_2018,
-       address = {Vienna, Austria},
-       title = {A {Task}-{Based} {DSL} for {Microcomputers}},
-       copyright = {All rights reserved},
+       location = {Vienna, Austria},
+       title = {A Task-Based {DSL} for Microcomputers},
+       rights = {All rights reserved},
        isbn = {978-1-4503-6355-6},
        doi = {10.1145/3183895.3183902},
-       abstract = {The Internet of Things, IoT, makes small connected computing devices almost omnipresent. These devices have typically very limited computing power and severe memory restrictions to make them cheap and power efficient. These devices can interact with the environment via special sensors and actuators. Since each device controls several peripherals running interleaved, the control software is quite complicated and hard to maintain. Task Oriented Programming, TOP, offers lightweight communicating threads that can inspect each other’s intermediate results. This makes it well suited for the IoT. In this paper presents a functional task-based domain specific language for these IoT devices. We show that it yields concise control programs. By restricting the datatypes and using strict evaluation these programs fit within the restrictions of microcontrollers.},
-       language = {en},
-       urldate = {2019-01-14},
-       booktitle = {Proceedings of the {Real} {World} {Domain} {Specific} {Languages} {Workshop} 2018 on   - {RWDSL2018}},
-       publisher = {ACM Press},
-       author = {Koopman, Pieter and Lubbers, Mart and Plasmeijer, Rinus},
-       year = {2018},
+       abstract = {The Internet of Things, {IoT}, makes small connected computing devices almost omnipresent. These devices have typically very limited computing power and severe memory restrictions to make them cheap and power efficient. These devices can interact with the environment via special sensors and actuators. Since each device controls several peripherals running interleaved, the control software is quite complicated and hard to maintain. Task Oriented Programming, {TOP}, offers lightweight communicating threads that can inspect each other’s intermediate results. This makes it well suited for the {IoT}. In this paper presents a functional task-based domain specific language for these {IoT} devices. We show that it yields concise control programs. By restricting the datatypes and using strict evaluation these programs fit within the restrictions of microcontrollers.},
+       eventtitle = {the Real World Domain Specific Languages Workshop 2018},
        pages = {1--11},
+       booktitle = {Proceedings of the Real World Domain Specific Languages Workshop 2018 on   - {RWDSL}2018},
+       publisher = {{ACM} Press},
+       author = {Koopman, Pieter and Lubbers, Mart and Plasmeijer, Rinus},
+       urldate = {2019-01-14},
+       date = {2018},
+       langid = {english},
        file = {a4-Koopman.pdf:/home/mrl/.local/share/zotero/storage/TXZD529C/a4-Koopman.pdf:application/pdf;Koopman et al. - 2018 - A Task-Based DSL for Microcomputers.pdf:/home/mrl/.local/share/zotero/storage/9ETMTMX2/Koopman et al. - 2018 - A Task-Based DSL for Microcomputers.pdf:application/pdf},
 }
 
 @inproceedings{lubbers_multitasking_2019,
-       address = {Opatija, Croatia},
-       title = {Multitasking on {Microcontrollers} using {Task} {Oriented} {Programming}},
-       copyright = {All rights reserved},
-       shorttitle = {Multitasking on {Microcontrollers} using {TOP}},
+       location = {Opatija, Croatia},
+       title = {Multitasking on Microcontrollers using Task Oriented Programming},
+       rights = {All rights reserved},
        doi = {10.23919/MIPRO.2019.8756711},
-       booktitle = {2019 42nd {International} {Convention} on {Information} and {Communication} {Technology}, {Electronics} and {Microelectronics} ({MIPRO})},
-       author = {Lubbers, M. and Koopman, P. and Plasmeijer, R.},
-       month = may,
-       year = {2019},
+       shorttitle = {Multitasking on Microcontrollers using {TOP}},
+       eventtitle = {{COnference} on {COmposability}, {COmprehensibility} and {COrrectness} of Working Software},
        pages = {1587--1592},
+       booktitle = {2019 42nd International Convention on Information and Communication Technology, Electronics and Microelectronics ({MIPRO})},
+       author = {Lubbers, M. and Koopman, P. and Plasmeijer, R.},
+       date = {2019-05},
        file = {03_4cows_5338.pdf:/home/mrl/.local/share/zotero/storage/3QJTF5HT/03_4cows_5338.pdf:application/pdf;08756711.pdf:/home/mrl/.local/share/zotero/storage/4S44JZPK/08756711.pdf:application/pdf;mipro_2019_proceedings.pdf:/home/mrl/.local/share/zotero/storage/5FFJLMTG/mipro_2019_proceedings.pdf:application/pdf},
 }
 
-@phdthesis{lubbers_adaptable_2015,
-       address = {Nijmegen},
-       type = {Bachelor's {Thesis}},
+@thesis{lubbers_adaptable_2015,
+       location = {Nijmegen},
        title = {Adaptable crawler specification generation system for leisure activity {RSS} feeds},
-       copyright = {All rights reserved},
+       rights = {All rights reserved},
        url = {http://theses.ubn.ru.nl/handle/123456789/220},
-       urldate = {2017-04-12},
-       school = {Radboud University},
+       pagetotal = {33},
+       institution = {Radboud University},
+       type = {Bachelor's Thesis},
        author = {Lubbers, Mart},
-       year = {2015},
+       urldate = {2017-04-12},
+       date = {2015},
        file = {Adaptable crawler specification generation system for leisure activity RSS feeds - Lubbers,M._BA_Thesis_2015.pdf:/home/mrl/.local/share/zotero/storage/7SDHJ3KD/Lubbers,M._BA_Thesis_2015.pdf:application/pdf},
 }
 
 @inproceedings{lubbers_task_2018,
-       address = {Lowell, MA},
-       title = {Task {Oriented} {Programming} and the {Internet} of {Things}},
+       location = {Lowell, {MA}},
+       title = {Task Oriented Programming and the Internet of Things},
        isbn = {978-1-4503-7143-8},
        doi = {10.1145/3310232.3310239},
-       abstract = {In the omnipresent Internet of Things (IoT), tiny devices sense and alter the environment, process information and communicate with the world. These devices have limited amounts of processing power and memory. This imposes severe restrictions on their software and communication protocols. As a result, applications are composed of parts written in various programming languages that communicate in many different ways. This impedance mismatch hampers development and maintenance. In previous work we have shown how an IoT device can be programmed by defining an embedded Domain Specific Language (eDSL). In this paper we show how IoT tasks can be seemlessly integrated with a Task Oriented Programming (TOP) server such as iTasks. It allows the specification on a high-level of abstraction of arbitrary collaborations between human beings, large systems, and now also IoT devices. The implementation is made in three steps. First, there is an interface to connect devices dynamically to an iTasks server using various communication protocols. Next, we solve the communication problem between IoT devices and the server by porting Shared Data Sources (SDSs) from TOP. As a result, data can be shared, viewed and updated from the server or IoT device. Finally, we crack the maintenance problem by switching from generating fixed code for the IoT devices to dynamically shipping code. It makes it possible to run multiple tasks on an IoT device and to decide at runtime what tasks that should be.},
-       language = {en},
-       booktitle = {Proceedings of the 30th {Symposium} on the {Implementation} and {Application} of {Functional} {Programming} {Languages}},
-       publisher = {ACM},
-       author = {Lubbers, Mart and Koopman, Pieter and Plasmeijer, Rinus},
-       year = {2018},
+       abstract = {In the omnipresent Internet of Things ({IoT}), tiny devices sense and alter the environment, process information and communicate with the world. These devices have limited amounts of processing power and memory. This imposes severe restrictions on their software and communication protocols. As a result, applications are composed of parts written in various programming languages that communicate in many different ways. This impedance mismatch hampers development and maintenance. In previous work we have shown how an {IoT} device can be programmed by defining an embedded Domain Specific Language ({eDSL}). In this paper we show how {IoT} tasks can be seemlessly integrated with a Task Oriented Programming ({TOP}) server such as {iTasks}. It allows the specification on a high-level of abstraction of arbitrary collaborations between human beings, large systems, and now also {IoT} devices. The implementation is made in three steps. First, there is an interface to connect devices dynamically to an {iTasks} server using various communication protocols. Next, we solve the communication problem between {IoT} devices and the server by porting Shared Data Sources ({SDSs}) from {TOP}. As a result, data can be shared, viewed and updated from the server or {IoT} device. Finally, we crack the maintenance problem by switching from generating fixed code for the {IoT} devices to dynamically shipping code. It makes it possible to run multiple tasks on an {IoT} device and to decide at runtime what tasks that should be.},
+       eventtitle = {International Symposium on Implementation and Application of Functional Languages},
        pages = {12},
+       booktitle = {Proceedings of the 30th Symposium on the Implementation and Application of Functional Programming Languages},
+       publisher = {{ACM}},
+       author = {Lubbers, Mart and Koopman, Pieter and Plasmeijer, Rinus},
+       date = {2018},
+       langid = {english},
        file = {Lubbers et al. - 2018 - Task Oriented Programming and the Internet of Thin.pdf:/home/mrl/.local/share/zotero/storage/3E5KLI5V/Lubbers et al. - 2018 - Task Oriented Programming and the Internet of Thin.pdf:application/pdf;Lubbers et al. - 2019 - Task Oriented Programming and the Internet of Thin.pdf:/home/mrl/.local/share/zotero/storage/R7TFJGVR/Lubbers et al. - 2019 - Task Oriented Programming and the Internet of Thin.pdf:application/pdf},
 }
 
-@mastersthesis{lubbers_task_2017,
-       address = {Nijmegen},
-       title = {Task {Oriented} {Programming} and the {Internet} of {Things}},
-       copyright = {All rights reserved},
+@thesis{lubbers_task_2017,
+       location = {Nijmegen},
+       title = {Task Oriented Programming and the Internet of Things},
+       rights = {All rights reserved},
        shorttitle = {{TOP} and the {IoT}},
-       school = {Radboud University},
+       pagetotal = {69},
+       institution = {Radboud University},
+       type = {Master's Thesis},
        author = {Lubbers, Mart},
-       year = {2017},
+       date = {2017},
        file = {thesis.pdf:/home/mrl/.local/share/zotero/storage/M49MWHPX/thesis.pdf:application/pdf},
 }
 
 @article{schuerman_praatalign:_2015,
-       title = {Praatalign: {Phonetic} {Alignment} {Made} {Easier} {For} {Psycholinguistic} {Data} {Processing}},
-       journal = {Architectures and Mechanisms for Language Processing},
-       author = {Schuerman, Will and Torreira, Francisco and Lubbers, Mart},
-       year = {2015},
+       title = {Praatalign: Phonetic Alignment Made Easier For Psycholinguistic Data Processing},
        pages = {92},
+       journaltitle = {Architectures and Mechanisms for Language Processing},
+       author = {Schuerman, Will and Torreira, Francisco and Lubbers, Mart},
+       date = {2015},
        file = {amlap2015.pdf:/home/mrl/.local/share/zotero/storage/H9WTW9TM/amlap2015.pdf:application/pdf;Will_Schuerman_AMLAP2015_Draft2.pdf:/home/mrl/.local/share/zotero/storage/BFBDDVIQ/Will_Schuerman_AMLAP2015_Draft2.pdf:application/pdf},
 }
 
 @incollection{koopman_simulation_2023,
-       address = {Cham},
-       series = {Lecture {Notes} in {Computer} {Science}},
-       title = {Simulation of a {Task}-{Based} {Embedded} {Domain} {Specific} {Language} for the {Internet} of {Things}},
-       language = {en},
+       location = {Cham},
+       title = {Simulation of a Task-Based Embedded Domain Specific Language for the Internet of Things},
+       series = {Lecture Notes in Computer Science},
+       pages = {51},
        number = {11916},
-       booktitle = {Composability, {Comprehensibility} and {Correctness} of {Working} {Software}, 7th {Winter} {School}, {Kosice}, {Slovakia}, {January} 22–26, 2018, {Revised} {Selected} {Papers}},
+       booktitle = {Composability, Comprehensibility and Correctness of Working Software, 7th Winter School, Kosice, Slovakia, January 22–26, 2018, Revised Selected Papers},
        publisher = {Springer},
        author = {Koopman, Pieter and Lubbers, Mart and Plasmeijer, Rinus},
-       year = {2023},
+       date = {2023},
+       langid = {english},
        note = {in-press},
-       pages = {51},
 }
 
 @misc{koopman_sustrainable_2022,
-       title = {{SusTrainable}: {Promoting} {Sustainability} as a {Fundamental} {Driver} in {Software} {Development} {Training} and {Education}. {Teacher} {Training}, {November} 1-5, {Nijmegen}, {The} {Netherlands}. {Revised} lecture notes},
-       copyright = {Creative Commons Attribution Non Commercial No Derivatives 4.0 International},
-       publisher = {arXiv},
-       author = {Koopman, Pieter and Lubbers, Mart and Fernandes, Jo\~{a}o Paulo},
-       year = {2022},
+       title = {{SusTrainable}: Promoting Sustainability as a Fundamental Driver in Software Development Training and Education. Teacher Training, November 1-5, Nijmegen, The Netherlands. Revised lecture notes},
+       rights = {Creative Commons Attribution Non Commercial No Derivatives 4.0 International},
+       publisher = {{arXiv}},
+       author = {Koopman, Pieter and Lubbers, Mart and Fernandes, João Paulo},
+       date = {2022},
        doi = {10.48550/ARXIV.2204.13993},
-       keywords = {Computers and Society (cs.CY), FOS: Computer and information sciences, Software Engineering (cs.SE)},
+       keywords = {Computers and Society (cs.{CY}), {FOS}: Computer and information sciences, Software Engineering (cs.{SE})},
        file = {Koopman et al. - 2022 - SusTrainable Promoting Sustainability as a Fundam.pdf:/home/mrl/.local/share/zotero/storage/5F9SRJQI/Koopman et al. - 2022 - SusTrainable Promoting Sustainability as a Fundam.pdf:application/pdf},
 }
 
 @inproceedings{lubbers_first-class_2022,
-       address = {New York, NY, USA},
+       location = {New York, {NY}, {USA}},
+       title = {First-Class Data Types in Shallow Embedded Domain-Specific Languages using Metaprogramming},
        series = {{IFL} '22},
-       title = {First-{Class} {Data} {Types} in {Shallow} {Embedded} {Domain}-{Specific} {Languages} using {Metaprogramming}},
-       booktitle = {Proceedings of the 34st {Symposium} on {Implementation} and {Application} of {Functional} {Languages}},
-       publisher = {ACM},
+       eventtitle = {Symposium on Implementation and Application of Functional Languages},
+       booktitle = {Proceedings of the 34st Symposium on Implementation and Application of Functional Languages},
+       publisher = {{ACM}},
        author = {Lubbers, Mart and Koopman, Pieter and Plasmeijer, Rinus},
-       year = {2022},
+       date = {2022},
        note = {event-place: Kopenhagen, Denmark. in-press},
        keywords = {clean, distributed applications, functional programming, internet of things, task oriented programming},
 }
 
 @book{lubbers_orchestrating_2023,
-       address = {Nijmegen},
-       title = {Orchestrating the {Internet} of {Things} using {Task}-{Oriented} {Programming}},
-       shorttitle = {A {Cocktail} of {Tools}: {DSLs} for {TOSD}},
-       publisher = {UB Nijmegen},
+       location = {Nijmegen},
+       title = {Orchestrating the Internet of Things using Task-Oriented Programming},
+       shorttitle = {A Cocktail of Tools: {DSLs} for {TOSD}},
+       publisher = {{UB} Nijmegen},
        author = {Lubbers, Mart},
-       year = {2023},
+       date = {2023},
 }
 
 @incollection{lubbers_green_2022,
-       address = {Cham},
-       title = {Green {Computing} for the {Internet} of {Things}},
-       language = {en},
-       booktitle = {{SusTrainable} {Summer} {School} 2022, {Rijeka}, {Croatia}, {July} 4–5, 2022, {Revised} {Selected} {Papers}},
+       location = {Cham},
+       title = {Green Computing for the Internet of Things},
+       pages = {1},
+       booktitle = {{SusTrainable} Summer School 2022, Rijeka, Croatia, July 4–5, 2022, Revised Selected Papers},
        publisher = {Springer International Publishing},
        author = {Lubbers, Mart and Koopman, Pieter},
-       year = {2022},
+       date = {2022},
+       langid = {english},
        note = {in-press},
-       pages = {1},
-}
-
-@article{lubbers_could_2022,
-       author = {Lubbers, Mart and Koopman, Pieter and Ramsingh, Adrian and Singer, Jeremy and Trinder, Phil},
-       title = {Could Tierless Languages Reduce IoT Development Grief?},
-       year = {2023},
-       issue_date = {February 2023},
-       publisher = {ACM},
-       address = {New York, NY, USA},
-       volume = {4},
-       number = {1},
-       issn = {2691-1914},
-       url = {https://doi.org/10.1145/3572901},
-       doi = {10.1145/3572901},
-       abstract = {Internet of Things (IoT) software is notoriously complex, conventionally comprising multiple tiers. Traditionally an IoT developer must use multiple programming languages and ensure that the components interoperate correctly. A novel alternative is to use a single tierless language with a compiler that generates the code for each component and ensures their correct interoperation.We report a systematic comparative evaluation of two tierless language technologies for IoT stacks: one for resource-rich sensor nodes (Clean with iTask) and one for resource-constrained sensor nodes (Clean with iTask and mTask). The evaluation is based on four implementations of a typical smart campus application: two tierless and two Python-based tiered.(1) We show that tierless languages have the potential to significantly reduce the development effort for IoT systems, requiring 70% less code than the tiered implementations. Careful analysis attributes this code reduction to reduced interoperation (e.g., two embedded domain-specific languages and one paradigm versus seven languages and two paradigms), automatically generated distributed communication, and powerful IoT programming abstractions. (2) We show that tierless languages have the potential to significantly improve the reliability of IoT systems, describing how Clean iTask/mTask maintains type safety, provides higher-order failure management, and simplifies maintainability. (3) We report the first comparison of a tierless IoT codebase for resource-rich sensor nodes with one for resource-constrained sensor nodes. The comparison shows that they have similar code size (within 7%), and functional structure. (4) We present the first comparison of two tierless IoT languages, one for resource-rich sensor nodes and the other for resource-constrained sensor nodes.},
-       journal = {ACM Trans. Internet Things},
-       month = {feb},
-       articleno = {6},
-       numpages = {35},
-       keywords = {IoT stacks, Tierless languages}
 }
 
 @inproceedings{koopman_strongly-typed_2022,
-       address = {New York, NY, USA},
+       location = {New York, {NY}, {USA}},
+       title = {Strongly-Typed Multi-View Stack-Based Computations},
        series = {{IFL} '22},
-       title = {Strongly-{Typed} {Multi}-{View} {Stack}-{Based} {Computations}},
-       booktitle = {Proceedings of the 34st {Symposium} on {Implementation} and {Application} of {Functional} {Languages}},
-       publisher = {ACM},
+       eventtitle = {Symposium on Implementation and Application of Functional Languages},
+       booktitle = {Proceedings of the 34st Symposium on Implementation and Application of Functional Languages},
+       publisher = {{ACM}},
        author = {Koopman, Pieter and Lubbers, Mart},
-       year = {2022},
+       date = {2022},
        note = {event-place: Kopenhagen, Denmark. under-review},
        keywords = {clean, distributed applications, functional programming, internet of things, task oriented programming},
 }
 
 @inproceedings{lubbers_deep_2022,
-       address = {Cham},
-       title = {Deep {Embedding} with {Class}},
+       location = {Cham},
+       title = {Deep Embedding with Class},
        isbn = {978-3-031-21314-4},
-       abstract = {The two flavours of DSL embedding are shallow and deep embedding. In functional languages, shallow embedding models the language constructs as functions in which the semantics are embedded. Adding semantics is therefore cumbersome while adding constructs is a breeze. Upgrading the functions to type classes lifts this limitation to a certain extent.},
-       booktitle = {Trends in {Functional} {Programming}},
+       abstract = {The two flavours of {DSL} embedding are shallow and deep embedding. In functional languages, shallow embedding models the language constructs as functions in which the semantics are embedded. Adding semantics is therefore cumbersome while adding constructs is a breeze. Upgrading the functions to type classes lifts this limitation to a certain extent.},
+       pages = {39--58},
+       booktitle = {Trends in Functional Programming},
        publisher = {Springer International Publishing},
        author = {Lubbers, Mart},
        editor = {Swierstra, Wouter and Wu, Nicolas},
-       year = {2022},
-       pages = {39--58},
+       date = {2022},
        file = {Lubbers - 2022 - Deep Embedding with Class.pdf:/home/mrl/.local/share/zotero/storage/KDFM73Z7/Lubbers - 2022 - Deep Embedding with Class.pdf:application/pdf},
 }
 
 @inproceedings{crooijmans_reducing_2022,
-       address = {Cham},
-       title = {Reducing the {Power} {Consumption} of {IoT} with {Task}-{Oriented} {Programming}},
+       location = {Cham},
+       title = {Reducing the Power Consumption of {IoT} with Task-Oriented Programming},
        isbn = {978-3-031-21314-4},
-       abstract = {Limiting the energy consumption of IoT nodes is a hot topic in green computing. For battery-powered devices this necessity is obvious, but the enormous growth of the number of IoT nodes makes energy efficiency important for every node in the IoT. In this paper, we show how we can automatically compute execution intervals for our task-oriented programs for the IoT. These intervals offer the possibility to save energy by bringing the microprocessor driving the IoT node into a low-power sleep mode until the task need to be executed. Furthermore, they offer an elegant way to add interrupts to the system. We do allow an arbitrary number of tasks on the IoT nodes and achieve significant reductions of the energy consumption by bringing the microprocessor in sleep mode as much as possible. We have seen energy reductions of an order of magnitude without imposing any constraints on the tasks to be executed on the IoT nodes.},
-       booktitle = {Trends in {Functional} {Programming}},
+       abstract = {Limiting the energy consumption of {IoT} nodes is a hot topic in green computing. For battery-powered devices this necessity is obvious, but the enormous growth of the number of {IoT} nodes makes energy efficiency important for every node in the {IoT}. In this paper, we show how we can automatically compute execution intervals for our task-oriented programs for the {IoT}. These intervals offer the possibility to save energy by bringing the microprocessor driving the {IoT} node into a low-power sleep mode until the task need to be executed. Furthermore, they offer an elegant way to add interrupts to the system. We do allow an arbitrary number of tasks on the {IoT} nodes and achieve significant reductions of the energy consumption by bringing the microprocessor in sleep mode as much as possible. We have seen energy reductions of an order of magnitude without imposing any constraints on the tasks to be executed on the {IoT} nodes.},
+       pages = {80--99},
+       booktitle = {Trends in Functional Programming},
        publisher = {Springer International Publishing},
        author = {Crooijmans, Sjoerd and Lubbers, Mart and Koopman, Pieter},
        editor = {Swierstra, Wouter and Wu, Nicolas},
-       year = {2022},
-       pages = {80--99},
+       date = {2022},
        file = {Crooijmans et al. - 2022 - Reducing the Power Consumption of IoT with Task-Or.pdf:/home/mrl/.local/share/zotero/storage/6DPWZRNJ/Crooijmans et al. - 2022 - Reducing the Power Consumption of IoT with Task-Or.pdf:application/pdf},
 }
+
+@article{lubbers_could_2023,
+       title = {Could Tierless Languages Reduce {IoT} Development Grief?},
+       volume = {4},
+       issn = {2691-1914},
+       doi = {10.1145/3572901},
+       abstract = {Internet of Things ({IoT}) software is notoriously complex, conventionally comprising multiple tiers. Traditionally an {IoT} developer must use multiple programming languages and ensure that the components interoperate correctly. A novel alternative is to use a single tierless language with a compiler that generates the code for each component and ensures their correct interoperation.We report a systematic comparative evaluation of two tierless language technologies for {IoT} stacks: one for resource-rich sensor nodes (Clean with {iTask}) and one for resource-constrained sensor nodes (Clean with {iTask} and {mTask}). The evaluation is based on four implementations of a typical smart campus application: two tierless and two Python-based tiered.(1) We show that tierless languages have the potential to significantly reduce the development effort for {IoT} systems, requiring 70\% less code than the tiered implementations. Careful analysis attributes this code reduction to reduced interoperation (e.g., two embedded domain-specific languages and one paradigm versus seven languages and two paradigms), automatically generated distributed communication, and powerful {IoT} programming abstractions. (2) We show that tierless languages have the potential to significantly improve the reliability of {IoT} systems, describing how Clean {iTask}/{mTask} maintains type safety, provides higher-order failure management, and simplifies maintainability. (3) We report the first comparison of a tierless {IoT} codebase for resource-rich sensor nodes with one for resource-constrained sensor nodes. The comparison shows that they have similar code size (within 7\%), and functional structure. (4) We present the first comparison of two tierless {IoT} languages, one for resource-rich sensor nodes and the other for resource-constrained sensor nodes.},
+       number = {1},
+       journaltitle = {{ACM} Trans. Internet Things},
+       author = {Lubbers, Mart and Koopman, Pieter and Ramsingh, Adrian and Singer, Jeremy and Trinder, Phil},
+       date = {2023-02},
+       note = {Place: New York, {NY}, {USA}
+Publisher: {ACM}},
+       keywords = {access control, internet-of-things, {IoT} stacks, policy language, privilege escalation, Smart home system, Tierless languages},
+}
index a39f585..5372a80 100644 (file)
   number       = {038},
   volume       = {08},
   year         = {2007},
-  month                = {dec},
+  month                = {12},
   doi          = {10.2139/ssrn.1071720}
 }
 
                  {C}onference on {F}unctional {P}rogramming ({ICFP} 2007)},
   address      = {{F}reiburg, {G}ermany},
   year         = 2007,
-  month                = {Oct 1--3},
+  month                = {10},
   publisher    = {ACM},
   isbn         = "978-1-59593-815-2",
   pages                = {141-152}
                  uses it, and discuss the implementation and the compiler
                  technology on which it depends.},
   journal      = {SIGPLAN Not.},
-  month                = {sep},
+  month                = {9},
   pages                = {79–89},
   numpages     = {11},
   keywords     = {distributed systems, web applications, network
                  Philippines},
   title                = {{CFRP}: {A} {Functional} {Reactive} {Programming}
                  {Language} for {Small}-{Scale} {Embedded} {Systems}},
-  isbn         = {978-981-323-406-2 978-981-323-407-9},
+  isbn         = {978-981-323-406-2},
   shorttitle   = {{CFRP}},
   doi          = {10.1142/9789813234079_0001},
   language     = {en},
index 6be118d..08597fe 100644 (file)
@@ -465,7 +465,7 @@ The papers of which I am first author are solely written by me, there were weekl
 \subsection{\Fullref{prt:tvt}}
 \Cref{prt:tvt} is based on a journal paper that quantitatively and qualitatively compares traditional \gls{IOT} architectures with \gls{TOP} \gls{IOT} architectures.
 \begin{enumerate}[resume]
-       \item \emph{Could Tierless Programming Reduce IoT Development Grief?} \citep*{lubbers_could_2022}
+       \item \emph{Could Tierless Programming Reduce IoT Development Grief?} \citep*{lubbers_could_2023}
                is an extended version of paper~\ref{enum:iot20}.
                It compares programming traditional tiered architectures to tierless architectures by illustrating a qualitative and a quantitative four-way comparison of a smart-campus application.
        \item \emph{Tiered versus Tierless \glsxtrshort{IOT} Stacks: Comparing Smart Campus Software Architectures} \citep*{lubbers_tiered_2020}\footnote{This work was partly funded by the 2019 Radboud-Glasgow Collaboration Fund.}\label{enum:iot20} compares traditional tiered programming to tierless architectures by comparing two implementations of a smart-campus application.
index 7c92167..c4a3c62 100644 (file)
@@ -28,9 +28,6 @@
 % Papersize and layout
 \input{preamble/layout}
 
-% Bibliography
-\input{preamble/bibliography}
-
 % Tables
 \input{preamble/table}
 
 % Crossreferences, urls and hyperlinks
 \input{preamble/crossref}
 
+% Bibliography
+\input{preamble/bibliography}
+
+
 % Custom commands
 \input{preamble/commands}
 
index 72aeb94..4b28e48 100644 (file)
@@ -1,17 +1,24 @@
-\usepackage[square]{natbib} % Cite bib entry completely
+\usepackage{csquotes}
+\usepackage[natbib,backref,backend=biber,style=authoryear-comp,useprefix=true,uniquelist=false,uniquename=false,giveninits=true,dashed=false,date=year,maxcitenames=2,maxbibnames=99,minnames=1]{biblatex}
+\DeclareSortingNamekeyTemplate{
+       \keypart{
+               \namepart{family}
+       }
+       \keypart{
+               \namepart{prefix}
+       }
+       \keypart{
+               \namepart{given}
+       }
+       \keypart{
+               \namepart{suffix}
+       }
+}
 
-\setlength{\bibsep}{0.0pt}
-\def\bibfont{\footnotesize}
-%\setcitestyle{numbers}
-%\bibliographystyle{alpha}
-\bibliographystyle{\subfix{myabbrvnat}}
+\addbibresource[glob]{bib/*.bib}
 \usepackage{ragged2e}
-\apptocmd{\thebibliography}{\RaggedRight}{}{}
-
-\makeatletter
-\let\saved@bibitem\@bibitem%
-\makeatother
-
+\renewcommand{\bibfont}{\footnotesize}%\RaggedRight}
+\setlength\bibitemsep{0pt}
 \newcommand{\refurl}[2]{\url{#1}, accessed on: #2}
 
 \makeatletter
index ed56f7f..459be1c 100644 (file)
@@ -1,10 +1,10 @@
 \usepackage[hyphens]{url}
-\usepackage[pdflang={en-GB},pagebackref,breaklinks,plainpages=false]{hyperref} % hyperlinks
+\usepackage[pdflang={en-GB},breaklinks,plainpages=false]{hyperref} % hyperlinks
 \usepackage{xr} % hyperlinks
-\renewcommand*{\backref}[1]{}
-\renewcommand*{\backrefalt}[4]{[{%
-       \ifcase #1 not cited.\or p.~#2.\else pp. #2.\fi%chktex 1
-}]}
+%\renewcommand*{\backref}[1]{}
+%\renewcommand*{\backrefalt}[4]{[{%
+%      \ifcase #1 not cited.\or p.~#2.\else pp. #2.\fi%chktex 1
+%}]}
 \hypersetup{%
        pdftitle={\mytitle},
        pdfauthor={\myauthor},
index a75a5b2..961b18c 100644 (file)
@@ -1,3 +1,4 @@
+\usepackage{microtype}       % short arrows
 \usepackage{stmaryrd}       % short arrows
 %\usepackage{textcomp}       % upquote
 \usepackage{titlecaps}      % titlecase commands
index f5e16d4..a9f6c3b 100644 (file)
 \phantomsection{}%
 \label{chp:bibliography}
 \addcontentsline{toc}{chapter}{Bibliography}
-\bibliography{bib/other,bib/self,bib/tiot}
+%\bibliography{bib/other,bib/self,bib/tiot}
+\renewbibmacro*{begentry}{\midsentence}
+\printbibliography%
 
 % Summary
 \subfile{back/summary}
index ffbd9f4..186725f 100644 (file)
@@ -312,7 +312,7 @@ In 2023, the SusTrainable summer school in Coimbra, Portugal will host a course
 \subsection{Using mTask in practise}
 Funded by the Radboud-Glasgow Collaboration Fund, collaborative work was executed with Phil Trinder, Jeremy Singer, and Adrian Ravi Kishore Ramsingh.
 An existing smart campus application was developed using \gls{MTASK} and quantitatively and qualitatively compared to the original application that was developed using a traditional \gls{IOT} stack \citep{lubbers_tiered_2020}.
-This research was later extended to include a four-way comparison: \gls{PYTHON}, \gls{MICROPYTHON}, \gls{ITASK}, and \gls{MTASK} \citep{lubbers_could_2022}.
+This research was later extended to include a four-way comparison: \gls{PYTHON}, \gls{MICROPYTHON}, \gls{ITASK}, and \gls{MTASK} \citep{lubbers_could_2023}.
 Currently, power efficiency behaviour of traditional versus \gls{TOP} \gls{IOT} stacks is being compared as well adding a FreeRTOS, and an Elixir implementation to the mix as well.
 
 \input{subfilepostamble}
index 27ca665..524de9a 100644 (file)
@@ -26,7 +26,7 @@
 \section{Introduction}%
 \label{sec_t4t:Intro}
 
-Conventional \gls{IOT} software stacks are notoriously complex and pose very significant software development, reliability, and maintenance challenges. \Gls{IOT} software architectures typically comprise multiple components organised in four or more tiers or layers \citep{sethi2017internet,Ravulavaru18,Alphonsa20}. This is due to the highly distributed nature of typical \gls{IOT} applications that must read sensor data from end points (the \emph{perception} layer), aggregate and select the data and communicate over a network (the \emph{network} layer), store the data in a database and analyse it (the \emph{application} layer) and display views of the data, commonly on web pages (the \emph{presentation} layer).
+Conventional \gls{IOT} software stacks are notoriously complex and pose very significant software development, reliability, and maintenance challenges. \Gls{IOT} software architectures typically comprise multiple components organised in four or more tiers or layers \citep{sethi2017internet,ravulavaru18,alphonsa20}. This is due to the highly distributed nature of typical \gls{IOT} applications that must read sensor data from end points (the \emph{perception} layer), aggregate and select the data and communicate over a network (the \emph{network} layer), store the data in a database and analyse it (the \emph{application} layer) and display views of the data, commonly on web pages (the \emph{presentation} layer).
 
 Conventional \gls{IOT} software architectures require the development of separate programs in various programming languages for each of the components\slash{}tiers in the stack. This is modular, but a significant burden for developers, and some key challenges are as follows.
 \begin{enumerate*}
@@ -257,9 +257,9 @@ However, many tierless languages have yet to provide a comprehensive set of secu
 To make this chapter self-contained we provide a concise overview of \gls{CLEAN}, \gls{TOP}, and \gls{IOT} programming in \gls{ITASK} and \gls{MTASK}. The minor innovations reported here are the interface to the \gls{IOT} sensors, and the \gls{CLEAN} port for the Raspberry Pi.
 
 \Gls{CLEAN} is a statically typed \gls{FP} language similar to \gls{HASKELL}: both languages are pure and non-strict \citep{achten_clean_2007}.
-A key difference is how state is handled: \gls{HASKELL} typically embeds stateful actions in the \haskellinline{IO} Monad \citep{peyton_jones_imperative_1993,wiki:IO}.
+A key difference is how state is handled: \gls{HASKELL} typically embeds stateful actions in the \haskellinline{IO} Monad \citep{peyton_jones_imperative_1993,wiki:io}.
 In contrast, \gls{CLEAN} has a uniqueness type system to ensure the single-threaded use of stateful objects like files and windows \citep{barendsen_uniqueness_1996}.
-Both \gls{CLEAN} and \gls{HASKELL} support fairly similar models of generic programming \citep{ComparingGenericProgramming}, enabling functions to work on many types. As we shall see generic programming is heavily used in task-oriented programming \citep{GenericProgrammingExtensionForClean,HinzeGenericFunctionalProgramming}, for example to construct web editors and communication protocols that work for any user-defined datatype.
+Both \gls{CLEAN} and \gls{HASKELL} support fairly similar models of generic programming \citep{comparinggenericprogramming}, enabling functions to work on many types. As we shall see generic programming is heavily used in task-oriented programming \citep{genericprogrammingextensionforclean,hinzegenericfunctionalprogramming}, for example to construct web editors and communication protocols that work for any user-defined datatype.
 
 \subsection{Task-oriented programming}
 
@@ -276,14 +276,14 @@ Application areas range from simple web forms or blinking \glspl{LED} to multi-u
 Task combinators compose tasks into more advanced tasks, either in parallel or sequential and allow task values to be observed by other tasks.
 As tasks can be returned as the result of a function, recursion can be freely used, e.g.\ to express the repetition of tasks.
 There are also standard combinators for common patterns.
-Tasks can exchange information via \glspl{SDS} \citep{ParametricLenses}.
+Tasks can exchange information via \glspl{SDS} \citep{parametriclenses}.
 All tasks involved can atomically observe and change the value of a typed \gls{SDS}, allowing more flexible communication than with task combinators.
 \Glspl{SDS} offer a general abstraction of data shared by different tasks, analogous to variables, persistent values, files, databases and peripherals like sensors. Combinators compose \glspl{SDS} into a larger \gls{SDS}, and
 parametric lenses define a specific view on \pgls{SDS}.
 
 \subsection{The iTask eDSL}%
 \label{sec_t4t:itasks}
-The \gls{ITASK} \gls{EDSL} is designed for constructing multi-user distributed applications, including web \citep{TOP-ICFP07} or \gls{IOT} applications.
+The \gls{ITASK} \gls{EDSL} is designed for constructing multi-user distributed applications, including web \citep{top-icfp07} or \gls{IOT} applications.
 Here we present \gls{ITASK} by example, and the first is a complete program to repeatedly read the room temperature from a \gls{DHT} sensor attached to the machine and display it on a web page (\cref{lst_t4t:itaskTemp}).
 The first line is the module name, the third imports the \cleaninline{iTask} module, and the main function (\cref{lst_t4t:itaskTemp:systemfro,lst_t4t:itaskTemp:systemto}) launches \cleaninline{readTempTask} and the \gls{ITASK} system to generate the web interface in \cref{fig_t4t:itaskTempSimple}.
 
@@ -797,7 +797,7 @@ There are several main reasons for the similarity.
 One is that the server-side code, i.e.\ for the presentation and application layers, is identical for both resource rich\slash{}constrained implementations.
 The identical server code accounts for approximately 40\% of the \gls{PWS} and \gls{PRS} codebases, and approximately 85\% of the \gls{CWS} and \gls{CRS} codebases (\cref{fig_t4t:multipercentage}\todo{make gray\-sca\-le}).
 For the perception and network layers on the sensor nodes, the \gls{PYTHON} and \gls{MICROPYTHON} implementations have the same structure, e.g.\ a class for each type of sensor, and use analogous libraries.
-Indeed, approaches like CircuitPython \citep{CircuitPython} allow the same code to execute on both resource-rich and resource-constrained sensor nodes.
+Indeed, approaches like CircuitPython \citep{circuitpython} allow the same code to execute on both resource-rich and resource-constrained sensor nodes.
 
 
 Like \gls{PYTHON} and \gls{MICROPYTHON}, \gls{ITASK} and \gls{MTASK} are designed to be similar, as elaborated in \cref{sec_t4t:ComparingTierless}. The similarity is apparent when comparing the \gls{ITASK} \gls{CRTS} and \cimtask{} \gls{CWTS} room temperature systems in \cref{lst_t4t:itaskTempFull,lst_t4t:mtasktemp}. That is, both implementations use similar \glspl{SDS} and lenses; they have similar \cleaninline{devTask}s that execute on the sensor node, and the server-side \cleaninline{mainTask}s are almost identical: they deploy the remote \cleaninline{devTask} before generating the web page to report the readings.
@@ -973,7 +973,7 @@ That said, many distributed system components written in languages that primaril
 
 In a typical tiered multi-language \gls{IOT} system the developer must integrate software in different languages with very different type systems, and potentially executing on different hardware. The challenges of maintaining type safety have long been recognised as a major component of the semantic friction in multi-language systems, e.g.\ \citet{ireland_classification_2009}.
 
-Even if the different languages used in two components are both strongly typed, they may attribute, often quite subtly, different types to a value. Such type errors can lead to runtime errors, or the application silently reporting erroneous data. Such errors can be hard to find. Automatic detection of such errors is sometimes possible, but requires an addition tool like Jinn \citep{Jinn,Furr2005}.
+Even if the different languages used in two components are both strongly typed, they may attribute, often quite subtly, different types to a value. Such type errors can lead to runtime errors, or the application silently reporting erroneous data. Such errors can be hard to find. Automatic detection of such errors is sometimes possible, but requires an addition tool like Jinn \citep{jinn,furr2005}.
 
 \begin{lstPython}[caption={\Gls{PRS} loses type safety as a sensor node sends a {\tt\footnotesize double}, and the server stores a {\tt\footnotesize string}.},label={lst_t4t:float},morekeywords={message,enum,uint64,double}]
 message SensorData {