updates
[phd-thesis.git] / other.bib
index 46bff99..2f2daad 100644 (file)
--- a/other.bib
+++ b/other.bib
@@ -354,19 +354,6 @@ Publisher: Association for Computing Machinery},
        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},
 }
 
-@incollection{lubbers_writing_2019,
-       address = {Cham},
-       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},
-       booktitle = {Central {European} {Functional} {Programming} {School}: 8th {Summer} {School}, {CEFP} 2019, {Budapest}, {Hungary}, {July} 17–21, 2019, {Revised} {Selected} {Papers}},
-       publisher = {Springer International Publishing},
-       author = {Lubbers, Mart and Koopman, Pieter and Plasmeijer, Rinus},
-       year = {2019},
-       pages = {51},
-       file = {Lubbers - Writing Internet of Things applications with Task .pdf:/home/mrl/.local/share/zotero/storage/ILZIBYW5/Lubbers - Writing Internet of Things applications with Task .pdf:application/pdf},
-}
-
 @mastersthesis{veen_van_der_mutable_2020,
        address = {Nijmegen},
        title = {Mutable {Collection} {Types} in {Shallow} {Embedded} {DSLs}},
@@ -442,6 +429,16 @@ Publisher: Association for Computing Machinery},
        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},
 }
 
+@inproceedings{lijnse_itasks_2009,
+       title = {{iTasks} 2: {iTasks} for {End}-users},
+       booktitle = {International {Symposium} on {Implementation} and {Application} of {Functional} {Languages}},
+       publisher = {Springer},
+       author = {Lijnse, Bas and Plasmeijer, Rinus},
+       year = {2009},
+       pages = {36--54},
+       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},
+}
+
 @mastersthesis{bohm_asynchronous_2019,
        address = {Nijmegen},
        title = {Asynchronous {Actions} in a {Synchronous} {World}},
@@ -523,6 +520,16 @@ few changes in existing programs.},
        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},
 }
 
+@mastersthesis{piers_task-oriented_2016,
+       address = {Nijmegen},
+       title = {Task-{Oriented} {Programming} for developing non-distributed interruptible embedded systems},
+       language = {en},
+       school = {Radboud University},
+       author = {Piers, Jasper},
+       year = {2016},
+       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}},
        booktitle = {{IEEE} {PerCom} 2018},
@@ -537,7 +544,7 @@ few changes in existing programs.},
        shorttitle = {Developing {Real} {Life}, {TOP} {Applications} for the {IOT}},
        language = {en},
        school = {Radboud University},
-       author = {Amazonas Cabral De Andrade, Matheus},
+       author = {Amazonas Cabral de Andrade, Matheus},
        year = {2018},
        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},
 }
@@ -566,12 +573,23 @@ few changes in existing programs.},
        file = {groj10-Haskell_front_end_Clean.pdf:/home/mrl/.local/share/zotero/storage/WVZWX8WT/groj10-Haskell_front_end_Clean.pdf:application/pdf},
 }
 
+@article{plasmeijer_itasks:_2007,
+       title = {{iTasks}: executable specifications of interactive work flow systems for the web},
+       volume = {42},
+       number = {9},
+       journal = {ACM SIGPLAN Notices},
+       author = {Plasmeijer, Rinus and Achten, Peter and Koopman, Pieter},
+       year = {2007},
+       pages = {141--152},
+       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}},
        volume = {9547},
-       isbn = {978-3-319-39109-0 978-3-319-39110-6},
+       isbn = {978-3-319-39110-6},
        url = {http://link.springer.com/10.1007/978-3-319-39110-6},
        urldate = {2017-02-22},
        booktitle = {Trends in {Functional} {Programming}},
@@ -597,6 +615,42 @@ few changes in existing programs.},
        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}},
+       volume = {52},
+       issn = {0360-0300},
+       url = {https://doi.org/10.1145/3354584},
+       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.},
+       author = {Lilis, Yannis and Savidis, Anthony},
+       month = oct,
+       year = {2019},
+       note = {Place: New York, NY, USA
+Publisher: Association for Computing Machinery},
+       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}},
+       isbn = {978-1-59593-674-5},
+       url = {https://doi.org/10.1145/1291201.1291211},
+       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 = {Association for Computing Machinery},
+       author = {Mainland, Geoffrey},
+       year = {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}},
        volume = {30},
@@ -615,7 +669,40 @@ Publisher: Association for Computing Machinery},
        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}},
+       isbn = {978-1-60558-064-7},
+       url = {https://doi.org/10.1145/1411286.1411300},
+       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 = {Association for Computing Machinery},
+       author = {Kariotis, Pericles S. and Procter, Adam M. and Harrison, William L.},
+       year = {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}},
+       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}},
+       publisher = {Springer Berlin Heidelberg},
+       author = {Gill, Andy},
+       editor = {Taha, Walid Mohamed},
+       year = {2009},
+       pages = {285--309},
+       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}},
        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".},
@@ -626,6 +713,110 @@ Publisher: Association for Computing Machinery},
        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}},
+       isbn = {1-58113-605-6},
+       url = {https://doi.org/10.1145/581690.581691},
+       doi = {10.1145/581690.581691},
+       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 = {Association for Computing Machinery},
+       author = {Sheard, Tim and Jones, Simon Peyton},
+       year = {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}},
+       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}},
+       publisher = {Springer Berlin Heidelberg},
+       author = {Seefried, Sean and Chakravarty, Manuel and Keller, Gabriele},
+       editor = {Karsai, Gabor and Visser, Eelco},
+       year = {2004},
+       pages = {186--205},
+       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}},
+       volume = {13},
+       url = {https://doi.org/10.1142/S0129626403001380},
+       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},
+       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}},
+       isbn = {978-1-4503-1574-6},
+       url = {https://doi.org/10.1145/2364506.2364509},
+       doi = {10.1145/2364506.2364509},
+       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 = {Association for Computing Machinery},
+       author = {Adams, Michael D. and DuBuisson, Thomas M.},
+       year = {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}},
+       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}},
+       publisher = {Springer Berlin Heidelberg},
+       author = {Norell, Ulf and Jansson, Patrik},
+       editor = {Kozen, Dexter},
+       year = {2004},
+       pages = {314--333},
+       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}},
+       isbn = {978-3-540-25935-0},
+       url = {https://doi.org/10.1007/978-3-540-25935-0_9},
+       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}},
+       publisher = {Springer Berlin Heidelberg},
+       author = {O'Donnell, John T.},
+       editor = {Lengauer, Christian and Batory, Don and Consel, Charles and Odersky, Martin},
+       year = {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}},
+       url = {http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/papers/},
+       urldate = {2021-09-07},
+       author = {Lynagh, Ian},
+       month = may,
+       year = {2003},
+       file = {10.1.1.5.9813.pdf:/home/mrl/.local/share/zotero/storage/G4AFM8XZ/10.1.1.5.9813.pdf:application/pdf},
+}
+
 @article{elliott_compiling_2003,
        title = {Compiling embedded languages},
        volume = {13},
@@ -639,6 +830,22 @@ Publisher: Association for Computing Machinery},
        file = {Elliott et al. - 2003 - Compiling embedded languages.pdf:/home/mrl/.local/share/zotero/storage/3X4Z6AKB/Elliott et al. - 2003 - Compiling embedded languages.pdf:application/pdf},
 }
 
+@incollection{czarnecki_dsl_2004,
+       address = {Berlin, Heidelberg},
+       title = {{DSL} {Implementation} in {MetaOCaml}, {Template} {Haskell}, and {C}++},
+       isbn = {978-3-540-25935-0},
+       url = {https://doi.org/10.1007/978-3-540-25935-0_4},
+       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}},
+       publisher = {Springer Berlin Heidelberg},
+       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},
+       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},
@@ -653,6 +860,140 @@ Publisher: Association for Computing Machinery},
        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}},
+       isbn = {0-89791-200-4},
+       url = {https://doi.org/10.1145/319838.319859},
+       doi = {10.1145/319838.319859},
+       booktitle = {Proceedings of the 1986 {ACM} {Conference} on {LISP} and {Functional} {Programming}},
+       publisher = {Association for Computing Machinery},
+       author = {Kohlbecker, Eugene and Friedman, Daniel P. and Felleisen, Matthias and Duba, Bruce},
+       year = {1986},
+       note = {event-place: Cambridge, Massachusetts, USA},
+       pages = {151--161},
+       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}},
+       isbn = {1-58113-649-8},
+       url = {https://doi.org/10.1145/604174.604179},
+       doi = {10.1145/604174.604179},
+       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 = {Association for Computing Machinery},
+       author = {Lämmel, Ralf and Jones, Simon Peyton},
+       year = {2003},
+       note = {event-place: New Orleans, Louisiana, USA},
+       keywords = {generic programming, rank-2 types, traversal, type cast},
+       pages = {26--37},
+       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},
+       doi = {10.1.1.22.1290},
+       booktitle = {O. {Danvy}, {Ed}., {University} of {Aarhus}, {Dept}. of {Computer} {Science}},
+       publisher = {BRICS},
+       author = {Bawden, Alan},
+       year = {1999},
+       pages = {88--99},
+       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}},
+       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}},
+       publisher = {Springer International Publishing},
+       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},
+       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}},
+       isbn = {978-1-4503-3161-6},
+       url = {https://doi.org/10.1145/2658761.2658770},
+       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 = {Association for Computing Machinery},
+       author = {Shioda, Masato and Iwasaki, Hideya and Sato, Shigeyuki},
+       year = {2014},
+       note = {event-place: Västerås, Sweden},
+       keywords = {Metaprogramming, D language, Embedded domain specific languages, Library},
+       pages = {63--72},
+       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}},
+       isbn = {978-1-4503-0860-1},
+       url = {https://doi.org/10.1145/2034675.2034689},
+       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 = {Association for Computing Machinery},
+       author = {Duregård, Jonas and Jansson, Patrik},
+       year = {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}},
+       isbn = {978-1-4503-3041-1},
+       url = {https://doi.org/10.1145/2633357.2633361},
+       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 = {Association for Computing Machinery},
+       author = {Eisenberg, Richard A. and Stolarek, Jan},
+       year = {2014},
+       note = {event-place: Gothenburg, Sweden},
+       keywords = {Haskell, defunctionalization, type-level programming},
+       pages = {95--106},
+       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}},
+       isbn = {978-1-4503-7143-8},
+       url = {https://doi.org/10.1145/3310232.3310235},
+       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 = {Association for Computing Machinery},
+       author = {Viera, Marcos and Balestrieri, Florent and Pardo, Alberto},
+       year = {2018},
+       note = {event-place: Lowell, MA, USA},
+       keywords = {Haskell, EDSL, Attribute Grammars, Dynamics, Staging},
+       pages = {95--106},
+       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},
+}
+
 @incollection{kiselyov_typed_2012,
        address = {Berlin, Heidelberg},
        title = {Typed {Tagless} {Final} {Interpreters}},
@@ -712,6 +1053,36 @@ Publisher: Association for Computing Machinery},
        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}},
+       isbn = {978-1-4503-1574-6},
+       url = {https://doi.org/10.1145/2364506.2364524},
+       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 = {Association for Computing Machinery},
+       author = {Terei, David and Marlow, Simon and Peyton Jones, Simon and Mazières, David},
+       year = {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},
+       institution = {Universiteit Utrecht},
+       author = {Leijen, Daan and Meijer, Erik},
+       year = {2001},
+       pages = {22},
+       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},
@@ -765,6 +1136,24 @@ Publisher: Association for Computing Machinery},
        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}},
+       isbn = {978-1-4503-4097-7},
+       url = {https://doi.org/10.1145/2847538.2847541},
+       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 = {Association for Computing Machinery},
+       author = {Najd, Shayan and Lindley, Sam and Svenningsson, Josef and Wadler, Philip},
+       year = {2016},
+       note = {event-place: St. Petersburg, FL, USA},
+       keywords = {EDSL, domain-specific language, DSL, embedded language, normalisation, QDSL, quotation, subformula principle},
+       pages = {25--36},
+       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},
        volume = {19},
@@ -778,15 +1167,21 @@ Publisher: Association for Computing Machinery},
        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},
 }
 
-@incollection{koopman_simulation_2018,
-       address = {Cham},
-       title = {Simulation of a {Task}-{Based} {Embedded} {Domain} {Specific} {Language} for the {Internet} of {Things}},
-       language = {en},
-       booktitle = {Central {European} {Functional} {Programming} {School}: 7th {Summer} {School}, {CEFP} 2018, {Košice}, {Slovakia}, {January} 22–26, 2018, {Revised} {Selected} {Papers}},
-       publisher = {Springer International Publishing},
-       author = {Koopman, Pieter and Lubbers, Mart and Plasmeijer, Rinus},
-       year = {2018},
-       pages = {51},
+@inproceedings{leijen_domain_2000,
+       address = {New York, NY, USA},
+       series = {{DSL} '99},
+       title = {Domain {Specific} {Embedded} {Compilers}},
+       isbn = {1-58113-255-7},
+       url = {https://doi.org/10.1145/331960.331977},
+       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 = {Association for Computing Machinery},
+       author = {Leijen, Daan and Meijer, Erik},
+       year = {2000},
+       note = {event-place: Austin, Texas, USA},
+       pages = {109--122},
+       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,
@@ -897,6 +1292,22 @@ Publisher: Association for Computing Machinery},
        pages = {36--43},
 }
 
+@inproceedings{steenvoorden_tophat_2019,
+       address = {New York, NY, USA},
+       series = {{PPDP} '19},
+       title = {{TopHat}: {A} {Formal} {Foundation} for {Task}-{Oriented} {Programming}},
+       isbn = {978-1-4503-7249-7},
+       url = {https://doi.org/10.1145/3354166.3354182},
+       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 = {Association for Computing Machinery},
+       author = {Steenvoorden, Tim and Naus, Nico and Klinik, Markus},
+       year = {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}},
@@ -942,6 +1353,21 @@ Publisher: Association for Computing Machinery},
        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}},
+       isbn = {978-3-030-67437-3},
+       url = {https://doi.org/10.1007/978-3-030-67438-0_2},
+       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}},
+       publisher = {Springer-Verlag},
+       author = {Young, David and Grebe, Mark and Gill, Andy},
+       year = {2021},
+       note = {event-place: Copenhagen, Denmark},
+       pages = {20--36},
+}
+
 @incollection{hinze_generic_2003,
        address = {Berlin, Heidelberg},
        title = {Generic {Haskell}: {Practice} and {Theory}},
@@ -958,6 +1384,38 @@ Publisher: Association for Computing Machinery},
        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},
 }
 
+@inproceedings{torrano_strictness_2005,
+       address = {Bristol, UK},
+       series = {Trends in {Functional} {Programming}},
+       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},
+       publisher = {Intellect},
+       author = {Torrano, Carmen and Segura, Clara},
+       editor = {Eekelen, Marko C. J. D. van},
+       year = {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}},
+       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},
+       publisher = {Intellect},
+       author = {Polak, Gracjan and Jarosz, Janusz},
+       editor = {Nilsson, Henrik},
+       year = {2006},
+       note = {event-place: Nottingham, UK},
+       pages = {1--11},
+       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},
+}
+
 @phdthesis{antonova_mtask_2022,
        address = {Nijmegen},
        type = {Bachelor's {Thesis}},
@@ -993,7 +1451,7 @@ Publisher: Association for Computing Machinery},
 
 @misc{wikipedia_contributors_rhapsody_2022,
        title = {Rhapsody (music) — {Wikipedia}, {The} {Free} {Encyclopedia}},
-       url = {https://en.wikipedia.org/w/index.php?title=Rhapsody_(music)&oldid=1068385257},
+       url = {https://en.wikipedia.org/w/index.php?title=Rhapsody_(music)\&oldid=1068385257},
        urldate = {2022-09-06},
        journal = {Wikipedia},
        author = {{Wikipedia contributors}},
@@ -1012,6 +1470,18 @@ Publisher: Association for Computing Machinery},
        pages = {219--247},
 }
 
+@article{achten_ins_1995,
+       title = {The ins and outs of {Clean} {I}/{O}},
+       volume = {5},
+       doi = {10.1017/S0956796800001258},
+       number = {1},
+       journal = {Journal of Functional Programming},
+       author = {Achten, Peter and Plasmeijer, Rinus},
+       year = {1995},
+       note = {Publisher: Cambridge University Press},
+       pages = {81--110},
+}
+
 @inproceedings{peyton_jones_imperative_1993,
        address = {New York, NY, USA},
        series = {{POPL} '93},
@@ -1028,3 +1498,312 @@ Publisher: Association for Computing Machinery},
        pages = {71--84},
        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}},
+       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},
+       publisher = {Springer London},
+       author = {Achten, Peter and van Groningen, John and Plasmeijer, Rinus},
+       editor = {Launchbury, John and Sansom, Patrick},
+       year = {1993},
+       pages = {1--17},
+       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}},
+       isbn = {978-1-4503-8050-8},
+       url = {https://doi.org/10.1145/3406088.3409021},
+       doi = {10.1145/3406088.3409021},
+       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 = {Association for Computing Machinery},
+       author = {Pickering, Matthew and Löh, Andres and Wu, Nicolas},
+       year = {2020},
+       note = {event-place: Virtual Event, USA},
+       keywords = {generic programming, staging},
+       pages = {122--135},
+       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}},
+       volume = {6},
+       url = {https://doi.org/10.1145/3498723},
+       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 λ⇒ 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öh, Andres and Wu, Nicolas and Yallop, Jeremy and Wang, Meng},
+       month = jan,
+       year = {2022},
+       note = {Place: New York, NY, USA
+Publisher: Association for Computing Machinery},
+       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},
+}
+
+@article{rhiger_type-safe_2009,
+       title = {Type-safe pattern combinators},
+       volume = {19},
+       doi = {10.1017/S0956796808007089},
+       number = {2},
+       journal = {Journal of Functional Programming},
+       author = {Rhiger, Morten},
+       year = {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}},
+       isbn = {978-1-4503-3042-8},
+       url = {https://doi.org/10.1145/2633628.2633634},
+       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 = {Association for Computing Machinery},
+       author = {de Vries, Edsko and Löh, Andres},
+       year = {2014},
+       note = {event-place: Gothenburg, Sweden},
+       keywords = {lenses, datatype-generic programming, generic views, json, metadata, sums of products, universes},
+       pages = {83--94},
+       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}},
+       volume = {4},
+       url = {https://doi.org/10.1145/3409002},
+       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.},
+       author = {Willis, Jamie and Wu, Nicolas and Pickering, Matthew},
+       month = aug,
+       year = {2020},
+       note = {Place: New York, NY, USA
+Publisher: Association for Computing Machinery},
+       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}},
+       isbn = {978-1-4503-6813-1},
+       url = {https://doi.org/10.1145/3331545.3342597},
+       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 = {Association for Computing Machinery},
+       author = {Pickering, Matthew and Wu, Nicolas and Kiss, Csongor},
+       year = {2019},
+       note = {event-place: Berlin, Germany},
+       keywords = {metaprogramming, staging, implicits},
+       pages = {71--84},
+       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}},
+       volume = {abs/2112.03653},
+       url = {https://arxiv.org/abs/2112.03653},
+       doi = {10.48550/arXiv.2112.03653},
+       journal = {CoRR},
+       author = {Pickering, Matthew and Löh, Andres and Wu, Nicolas},
+       year = {2021},
+       note = {arXiv: 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}},
+       isbn = {978-94-6458-595-7},
+       shorttitle = {{TopHat}: {TOP} with {Style}},
+       language = {English},
+       publisher = {UB Nijmegen},
+       author = {Steenvoorden, Tim},
+       year = {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}},
+       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}},
+       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},
+       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}},
+       volume = {6},
+       url = {https://doi.org/10.1145/3549821},
+       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.},
+       author = {Materzok, Marek},
+       month = aug,
+       year = {2022},
+       note = {Place: New York, NY, USA
+Publisher: Association for Computing Machinery},
+       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}},
+       volume = {40},
+       issn = {1882-7055},
+       url = {https://doi.org/10.1007/s00354-022-00177-z},
+       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.},
+       number = {2},
+       journal = {New Generation Computing},
+       author = {Egi, Satoshi and Kawata, Akira and Kori, Mayuko and Ogawa, Hiromi},
+       month = jul,
+       year = {2022},
+       pages = {481--506},
+       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}},
+       isbn = {978-1-4503-9438-3},
+       url = {https://doi.org/10.1145/3546189.3549921},
+       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 = {Association for Computing Machinery},
+       author = {Blanchette, Henry and Vazou, Niki and Lampropoulos, Leonidas},
+       year = {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}},
+       title = {Digital circuit in {C}\${\textbackslash}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λ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λ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},
+       author = {Baaij, C. P. R.},
+       month = jan,
+       year = {2015},
+       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},
+       file = {Baaij - 2015 - Digital circuit in CλaSH functional specification.pdf:/home/mrl/.local/share/zotero/storage/MYJ33ISL/Baaij - 2015 - Digital circuit in CλaSH functional specification.pdf:application/pdf},
+}
+
+@inproceedings{mcdonell_embedded_2022,
+       address = {New York, NY, USA},
+       series = {Haskell 2022},
+       title = {Embedded {Pattern} {Matching}},
+       isbn = {978-1-4503-9438-3},
+       url = {https://doi.org/10.1145/3546189.3549917},
+       doi = {10.1145/3546189.3549917},
+       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 = {Association for Computing Machinery},
+       author = {McDonell, Trevor L. and Meredith, Joshua D. and Keller, Gabriele},
+       year = {2022},
+       note = {event-place: Ljubljana, Slovenia},
+       keywords = {Haskell, algebraic data types, embedded languages, pattern matching},
+       pages = {123--136},
+       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}},
+       title = {Linguistic reuse},
+       school = {Rice University},
+       author = {Krishnamurthi, Shriram},
+       year = {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},
+       type = {Presentation},
+       title = {Internet of {Things}},
+       author = {Ashton, Kevin},
+       year = {1999},
+       note = {Presentation at Proctor \& Gamble},
+}
+
+@article{ashton_that_2009,
+       title = {That ‘{Internet} of {Things}’ {Thing}},
+       volume = {22},
+       number = {7},
+       journal = {RFID journal},
+       author = {Ashton, Kevin},
+       year = {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},
+       author = {van Gemert, Dante},
+       year = {2022},
+       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,
+       title = {Toppyt},
+       url = {https://gitlab.com/baslijnse/toppyt},
+       urldate = {2022-10-07},
+       author = {Lijnse, Bas},
+       year = {2022},
+}
+
+@article{sun_compositional_2022,
+       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},
+       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,
+       title = {{hTask}},
+       url = {https://gitlab.com/mlubbers/acsds},
+       urldate = {2022-10-07},
+       author = {Lubbers, Mart},
+       year = {2022},
+}