more updates
[phd-thesis.git] / other.bib
1
2 @mastersthesis{crooijmans_reducing_2021,
3 address = {Nijmegen},
4 title = {Reducing the {Power} {Consumption} of {IoT} {Devices} in {Task}-{Oriented} {Programming}},
5 language = {en},
6 school = {Radboud University},
7 author = {Crooijmans, Sjoerd},
8 month = jul,
9 year = {2021},
10 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},
11 }
12
13 @inproceedings{plasmeijer_task-oriented_2012,
14 address = {New York, NY, USA},
15 series = {{PPDP} '12},
16 title = {Task-{Oriented} {Programming} in a {Pure} {Functional} {Language}},
17 isbn = {978-1-4503-1522-7},
18 url = {https://doi.org/10.1145/2370776.2370801},
19 doi = {10.1145/2370776.2370801},
20 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.},
21 booktitle = {Proceedings of the 14th {Symposium} on {Principles} and {Practice} of {Declarative} {Programming}},
22 publisher = {Association for Computing Machinery},
23 author = {Plasmeijer, Rinus and Lijnse, Bas and Michels, Steffen and Achten, Peter and Koopman, Pieter},
24 year = {2012},
25 note = {event-place: Leuven, Belgium},
26 keywords = {clean, task-oriented programming},
27 pages = {195--206},
28 file = {103802.pdf:/home/mrl/.local/share/zotero/storage/ZE6A65AW/103802.pdf:application/pdf},
29 }
30
31 @inproceedings{brus_clean_1987,
32 address = {Berlin, Heidelberg},
33 title = {Clean — {A} language for functional graph rewriting},
34 isbn = {978-3-540-47879-9},
35 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.},
36 booktitle = {Functional {Programming} {Languages} and {Computer} {Architecture}},
37 publisher = {Springer Berlin Heidelberg},
38 author = {Brus, T. H. and van Eekelen, M. C. J. D. and van Leer, M. O. and Plasmeijer, M. J.},
39 editor = {Kahn, Gilles},
40 year = {1987},
41 pages = {364--384},
42 file = {brut87-Clean.ps.gz:/home/mrl/.local/share/zotero/storage/T2QATWIE/brut87-Clean.ps.gz:application/gzip},
43 }
44
45 @misc{bolingbroke_constraint_2011,
46 title = {Constraint {Kinds} for {GHC}},
47 url = {http://blog.omega-prime.co.uk/2011/09/10/constraint-kinds-for-ghc/},
48 urldate = {2021-06-09},
49 journal = {:: (Bloggable a) ={\textgreater} a -{\textgreater} IO ()},
50 author = {Bolingbroke, Max},
51 month = sep,
52 year = {2011},
53 file = {Constraint Kinds for GHC:/home/mrl/.local/share/zotero/storage/R6RL79K7/constraint-kinds-for-ghc.html:text/html},
54 }
55
56 @inproceedings{fegaras_revisiting_1996,
57 address = {New York, NY, USA},
58 series = {{POPL} '96},
59 title = {Revisiting {Catamorphisms} over {Datatypes} with {Embedded} {Functions} (or, {Programs} from {Outer} {Space})},
60 isbn = {0-89791-769-3},
61 url = {https://doi.org/10.1145/237721.237792},
62 doi = {10.1145/237721.237792},
63 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.},
64 booktitle = {Proceedings of the 23rd {ACM} {SIGPLAN}-{SIGACT} {Symposium} on {Principles} of {Programming} {Languages}},
65 publisher = {Association for Computing Machinery},
66 author = {Fegaras, Leonidas and Sheard, Tim},
67 year = {1996},
68 note = {event-place: St. Petersburg Beach, Florida, USA},
69 pages = {284--294},
70 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},
71 }
72
73 @inproceedings{pfenning_higher-order_1988,
74 address = {New York, NY, USA},
75 series = {{PLDI} '88},
76 title = {Higher-{Order} {Abstract} {Syntax}},
77 isbn = {0-89791-269-1},
78 url = {https://doi.org/10.1145/53990.54010},
79 doi = {10.1145/53990.54010},
80 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.},
81 booktitle = {Proceedings of the {ACM} {SIGPLAN} 1988 {Conference} on {Programming} {Language} {Design} and {Implementation}},
82 publisher = {Association for Computing Machinery},
83 author = {Pfenning, F. and Elliott, C.},
84 year = {1988},
85 note = {event-place: Atlanta, Georgia, USA},
86 pages = {199--208},
87 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},
88 }
89
90 @inproceedings{chlipala_parametric_2008,
91 address = {New York, NY, USA},
92 series = {{ICFP} '08},
93 title = {Parametric {Higher}-{Order} {Abstract} {Syntax} for {Mechanized} {Semantics}},
94 isbn = {978-1-59593-919-7},
95 url = {https://doi.org/10.1145/1411204.1411226},
96 doi = {10.1145/1411204.1411226},
97 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.},
98 booktitle = {Proceedings of the 13th {ACM} {SIGPLAN} {International} {Conference} on {Functional} {Programming}},
99 publisher = {Association for Computing Machinery},
100 author = {Chlipala, Adam},
101 year = {2008},
102 note = {event-place: Victoria, BC, Canada},
103 keywords = {compiler verification, dependent types, interactive proof assistants, type-theoretic semantics},
104 pages = {143--156},
105 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},
106 }
107
108 @incollection{reynolds_user-defined_1978,
109 address = {New York, NY},
110 title = {User-{Defined} {Types} and {Procedural} {Data} {Structures} as {Complementary} {Approaches} to {Data} {Abstraction}},
111 isbn = {978-1-4612-6315-9},
112 url = {https://doi.org/10.1007/978-1-4612-6315-9_22},
113 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.},
114 booktitle = {Programming {Methodology}: {A} {Collection} of {Articles} by {Members} of {IFIP} {WG2}.3},
115 publisher = {Springer New York},
116 author = {Reynolds, John C.},
117 editor = {Gries, David},
118 year = {1978},
119 doi = {10.1007/978-1-4612-6315-9_22},
120 pages = {309--317},
121 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},
122 }
123
124 @misc{ghc_team_ghc_2021,
125 title = {{GHC} {User}’s {Guide} {Documentation}},
126 url = {https://downloads.haskell.org/~ghc/latest/docs/users_guide.pdf},
127 language = {English},
128 urldate = {2021-02-24},
129 publisher = {Release},
130 author = {GHC Team},
131 year = {2021},
132 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},
133 }
134
135 @misc{ghc_team_datadynamic_2021,
136 title = {Data.{Dynamic}},
137 url = {https://hackage.haskell.org/package/base-4.14.1.0/docs/Data-Dynamic.html},
138 language = {English},
139 urldate = {2021-02-24},
140 publisher = {Release},
141 author = {GHC Team},
142 year = {2021},
143 }
144
145 @inproceedings{jeuring_polytypic_1996,
146 address = {Berlin, Heidelberg},
147 title = {Polytypic programming},
148 isbn = {978-3-540-70639-7},
149 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.},
150 booktitle = {Advanced {Functional} {Programming}},
151 publisher = {Springer Berlin Heidelberg},
152 author = {Jeuring, Johan and Jansson, Patrik},
153 editor = {Launchbury, John and Meijer, Erik and Sheard, Tim},
154 year = {1996},
155 pages = {68--114},
156 file = {Jeuring and Jansson - 1996 - Polytypic programming.pdf:/home/mrl/.local/share/zotero/storage/SLC4G2IT/Jeuring and Jansson - 1996 - Polytypic programming.pdf:application/pdf},
157 }
158
159 @book{peyton_jones_haskell_2003,
160 address = {Cambridge},
161 title = {Haskell 98 language and libraries: the revised report},
162 isbn = {0-521 826144},
163 publisher = {Cambridge University Press},
164 editor = {Peyton Jones, Simon},
165 year = {2003},
166 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},
167 }
168
169 @inproceedings{laufer_combining_1994,
170 title = {Combining type classes and existential types},
171 booktitle = {Proceedings of the {Latin} {American} {Informatic} {Conference} ({PANEL})},
172 publisher = {ITESM-CEM},
173 author = {Läufer, Konstantin},
174 year = {1994},
175 note = {event-place: Monterrey, Mexico},
176 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},
177 }
178
179 @techreport{hughes_restricted_1999,
180 address = {Paris},
181 title = {Restricted data types in {Haskell}},
182 number = {UU-CS-1999-28},
183 institution = {Department of Information and Computing Sciences, Utrecht University},
184 author = {Hughes, John},
185 year = {1999},
186 pages = {16},
187 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},
188 }
189
190 @article{najd_trees_2017,
191 title = {Trees that {Grow}},
192 volume = {23},
193 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.},
194 number = {1},
195 journal = {Journal of Universal Computer Science},
196 author = {Najd, Shayan and Peyton Jones, Simon},
197 month = jan,
198 year = {2017},
199 pages = {42--62},
200 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},
201 }
202
203 @inproceedings{loh_open_2006,
204 address = {New York, NY, USA},
205 series = {{PPDP} '06},
206 title = {Open {Data} {Types} and {Open} {Functions}},
207 isbn = {1-59593-388-3},
208 url = {https://doi.org/10.1145/1140335.1140352},
209 doi = {10.1145/1140335.1140352},
210 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},
211 booktitle = {Proceedings of the 8th {ACM} {SIGPLAN} {International} {Conference} on {Principles} and {Practice} of {Declarative} {Programming}},
212 publisher = {Association for Computing Machinery},
213 author = {Löh, Andres and Hinze, Ralf},
214 year = {2006},
215 note = {event-place: Venice, Italy},
216 keywords = {functional programming, Haskell, expression problem, extensible data types, extensible exceptions, extensible functions, generic programming, mutually recursive modules},
217 pages = {133--144},
218 file = {OpenDatatypes.pdf:/home/mrl/.local/share/zotero/storage/NEP9GZ9N/OpenDatatypes.pdf:application/pdf},
219 }
220
221 @inproceedings{hutton_fold_1998,
222 address = {New York, NY, USA},
223 series = {{ICFP} '98},
224 title = {Fold and {Unfold} for {Program} {Semantics}},
225 isbn = {1-58113-024-4},
226 url = {https://doi.org/10.1145/289423.289457},
227 doi = {10.1145/289423.289457},
228 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.},
229 booktitle = {Proceedings of the {Third} {ACM} {SIGPLAN} {International} {Conference} on {Functional} {Programming}},
230 publisher = {Association for Computing Machinery},
231 author = {Hutton, Graham},
232 year = {1998},
233 note = {event-place: Baltimore, Maryland, USA},
234 pages = {280--288},
235 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},
236 }
237
238 @article{abadi_dynamic_1991,
239 title = {Dynamic {Typing} in a {Statically} {Typed} {Language}},
240 volume = {13},
241 issn = {0164-0925},
242 url = {https://doi.org/10.1145/103135.103138},
243 doi = {10.1145/103135.103138},
244 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.},
245 number = {2},
246 journal = {ACM Trans. Program. Lang. Syst.},
247 author = {Abadi, Martín and Cardelli, Luca and Pierce, Benjamin and Plotkin, Gordon},
248 month = apr,
249 year = {1991},
250 note = {Place: New York, NY, USA
251 Publisher: Association for Computing Machinery},
252 keywords = {theory},
253 pages = {237--268},
254 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},
255 }
256
257 @inproceedings{svenningsson_combining_2013,
258 address = {Berlin, Heidelberg},
259 title = {Combining {Deep} and {Shallow} {Embedding} for {EDSL}},
260 isbn = {978-3-642-40447-4},
261 doi = {10.1007/978-3-642-40447-4_2},
262 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.},
263 booktitle = {Trends in {Functional} {Programming}},
264 publisher = {Springer Berlin Heidelberg},
265 author = {Svenningsson, Josef and Axelsson, Emil},
266 editor = {Loidl, Hans-Wolfgang and Peña, Ricardo},
267 year = {2013},
268 pages = {21--36},
269 file = {svenningsson2013combining.pdf:/home/mrl/.local/share/zotero/storage/NFBGZCZT/svenningsson2013combining.pdf:application/pdf},
270 }
271
272 @article{mitchell_abstract_1988,
273 title = {Abstract {Types} {Have} {Existential} {Type}},
274 volume = {10},
275 issn = {0164-0925},
276 url = {https://doi.org/10.1145/44501.45065},
277 doi = {10.1145/44501.45065},
278 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.},
279 number = {3},
280 journal = {ACM Trans. Program. Lang. Syst.},
281 author = {Mitchell, John C. and Plotkin, Gordon D.},
282 month = jul,
283 year = {1988},
284 note = {Place: New York, NY, USA
285 Publisher: Association for Computing Machinery},
286 pages = {470--502},
287 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},
288 }
289
290 @inproceedings{yorgey_giving_2012,
291 address = {New York, NY, USA},
292 series = {{TLDI} '12},
293 title = {Giving {Haskell} a {Promotion}},
294 isbn = {978-1-4503-1120-5},
295 url = {https://doi.org/10.1145/2103786.2103795},
296 doi = {10.1145/2103786.2103795},
297 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.},
298 booktitle = {Proceedings of the 8th {ACM} {SIGPLAN} {Workshop} on {Types} in {Language} {Design} and {Implementation}},
299 publisher = {Association for Computing Machinery},
300 author = {Yorgey, Brent A. and Weirich, Stephanie and Cretin, Julien and Peyton Jones, Simon and Vytiniotis, Dimitrios and Magalhães, José Pedro},
301 year = {2012},
302 note = {event-place: Philadelphia, Pennsylvania, USA},
303 keywords = {haskell, kinds, polymorphism, promotion},
304 pages = {53--66},
305 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},
306 }
307
308 @inproceedings{atkey_unembedding_2009,
309 address = {New York, NY, USA},
310 series = {Haskell '09},
311 title = {Unembedding {Domain}-{Specific} {Languages}},
312 isbn = {978-1-60558-508-6},
313 url = {https://doi.org/10.1145/1596638.1596644},
314 doi = {10.1145/1596638.1596644},
315 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.},
316 booktitle = {Proceedings of the 2nd {ACM} {SIGPLAN} {Symposium} on {Haskell}},
317 publisher = {Association for Computing Machinery},
318 author = {Atkey, Robert and Lindley, Sam and Yallop, Jeremy},
319 year = {2009},
320 note = {event-place: Edinburgh, Scotland},
321 keywords = {domain-specific languages, higher-order abstract syntax, type classes, unembedding},
322 pages = {37--48},
323 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},
324 }
325
326 @inproceedings{krishnamurthi_synthesizing_1998,
327 address = {Berlin, Heidelberg},
328 title = {Synthesizing object-oriented and functional design to promote re-use},
329 isbn = {978-3-540-69064-1},
330 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.},
331 booktitle = {{ECOOP}'98{Object}-{Oriented} {Programming}},
332 publisher = {Springer Berlin Heidelberg},
333 author = {Krishnamurthi, Shriram and Felleisen, Matthias and Friedman, Daniel P.},
334 editor = {Jul, Eric},
335 year = {1998},
336 note = {event-place: Brussels, Belgium},
337 pages = {91--113},
338 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},
339 }
340
341 @incollection{gibbons_functional_2015,
342 address = {Cham},
343 title = {Functional {Programming} for {Domain}-{Specific} {Languages}},
344 isbn = {978-3-319-15940-9},
345 url = {https://doi.org/10.1007/978-3-319-15940-9_1},
346 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.},
347 booktitle = {Central {European} {Functional} {Programming} {School}: 5th {Summer} {School}, {CEFP} 2013, {Cluj}-{Napoca}, {Romania}, {July} 8-20, 2013, {Revised} {Selected} {Papers}},
348 publisher = {Springer International Publishing},
349 author = {Gibbons, Jeremy},
350 editor = {Zsók, Viktória and Horváth, Zoltán and Csató, Lehel},
351 year = {2015},
352 doi = {10.1007/978-3-319-15940-9_1},
353 pages = {1--28},
354 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},
355 }
356
357 @incollection{lubbers_writing_2019,
358 address = {Cham},
359 title = {Writing {Internet} of {Things} applications with {Task} {Oriented} {Programming}},
360 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).},
361 language = {en},
362 booktitle = {Central {European} {Functional} {Programming} {School}: 8th {Summer} {School}, {CEFP} 2019, {Budapest}, {Hungary}, {July} 1721, 2019, {Revised} {Selected} {Papers}},
363 publisher = {Springer International Publishing},
364 author = {Lubbers, Mart and Koopman, Pieter and Plasmeijer, Rinus},
365 year = {2019},
366 note = {in-press},
367 pages = {51},
368 file = {cefp.pdf:/home/mrl/.local/share/zotero/storage/VEWFI5DG/cefp.pdf:application/pdf},
369 }
370
371 @mastersthesis{veen_van_der_mutable_2020,
372 address = {Nijmegen},
373 title = {Mutable {Collection} {Types} in {Shallow} {Embedded} {DSLs}},
374 language = {en},
375 school = {Radboud University},
376 author = {Veen, van der, Erin},
377 month = jun,
378 year = {2020},
379 file = {thesis_final.pdf:/home/mrl/.local/share/zotero/storage/Y9QWGGB9/thesis_final.pdf:application/pdf},
380 }
381
382 @phdthesis{alimarine_generic_2005,
383 address = {Nijmegen},
384 type = {{PhD}},
385 title = {Generic {Functional} {Programming}},
386 language = {en},
387 school = {Radboud University},
388 author = {Alimarine, Artem},
389 year = {2005},
390 file = {Alimarine - Generic Functional Programming.pdf:/home/mrl/.local/share/zotero/storage/PDTS3SGX/Alimarine - Generic Functional Programming.pdf:application/pdf},
391 }
392
393 @phdthesis{boer_de_secure_2020,
394 address = {Nijmegen},
395 type = {Bachelor's {Thesis}},
396 title = {Secure {Communication} {Channels} for the {mTask} {System}.},
397 language = {en},
398 school = {Radboud University},
399 author = {Boer, de, Michel},
400 month = jun,
401 year = {2020},
402 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},
403 }
404
405 @inproceedings{barendregt_towards_1987,
406 title = {Towards an intermediate language for graph rewriting},
407 volume = {1},
408 booktitle = {{PARLE}, {Parallel} {Architectures} and {Languages} {Europe}},
409 publisher = {Springer Verlag},
410 author = {Barendregt, HP and van Eekelen, MCJD and Glauert, JRW and Kennaway, JR and Plasmeijer, MJ and Sleep, MR},
411 year = {1987},
412 pages = {159--174},
413 file = {barh87-Lean.ps.gz:/home/mrl/.local/share/zotero/storage/63FBHND7/barh87-Lean.ps.gz:application/gzip},
414 }
415
416 @incollection{wang_maintaining_2018,
417 address = {Cham},
418 title = {Maintaining {Separation} of {Concerns} {Through} {Task} {Oriented} {Software} {Development}},
419 volume = {10788},
420 isbn = {978-3-319-89718-9 978-3-319-89719-6},
421 url = {http://link.springer.com/10.1007/978-3-319-89719-6_2},
422 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.},
423 language = {en},
424 urldate = {2019-01-14},
425 booktitle = {Trends in {Functional} {Programming}},
426 publisher = {Springer International Publishing},
427 author = {Stutterheim, Jurriën and Achten, Peter and Plasmeijer, Rinus},
428 editor = {Wang, Meng and Owens, Scott},
429 year = {2018},
430 doi = {10.1007/978-3-319-89719-6},
431 pages = {19--38},
432 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},
433 }
434
435 @article{barendsen_uniqueness_1996,
436 title = {Uniqueness typing for functional languages with graph rewriting semantics},
437 volume = {6},
438 number = {6},
439 journal = {Mathematical structures in computer science},
440 author = {Barendsen, Erik and Smetsers, Sjaak},
441 year = {1996},
442 pages = {579--612},
443 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},
444 }
445
446 @inproceedings{lijnse_itasks_2009,
447 title = {{iTasks} 2: {iTasks} for {End}-users},
448 booktitle = {International {Symposium} on {Implementation} and {Application} of {Functional} {Languages}},
449 publisher = {Springer},
450 author = {Lijnse, Bas and Plasmeijer, Rinus},
451 year = {2009},
452 pages = {36--54},
453 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},
454 }
455
456 @mastersthesis{bohm_asynchronous_2019,
457 address = {Nijmegen},
458 title = {Asynchronous {Actions} in a {Synchronous} {World}},
459 abstract = {This thesis introduces a system for asynchronous communication in the iTasks framework. The
460 framework is written in Clean, a pure, lazy, functional language. Tasks need to be able to access
461 data in the system and retrieve data from all kinds of data sources. The share system allows
462 tasks to read arbitrary data sources and provides a simple interface that allows composition of
463 different data sources. This system allows tasks to share and store data in an efficient, re-usable
464 way.
465 A disadvantage of the share system is that it does not allow asynchronous evaluation. When
466 one task is using a share, other tasks have to wait for the full evaluation of this share before they
467 can be evaluated. This has the effect that users in the iTasks framework must wait on other
468 users. This results in poor user experience.
469 We implement a share system which, by way of share rewriting, allows asynchronous evalua-
470 tion. The system can be used to communicate with arbitrary services on the internet, as well as
471 to communicate between different iTasks servers in a distributed context.
472 We show how asynchronous shares are implemented and what the limitations are. We also
473 show multiple practical examples of using asynchronous shares. The new system can be effectively
474 used to consume services on the internet. It fits nicely into existing iTasks programs and requires
475 few changes in existing programs.},
476 language = {en},
477 school = {Radboud University},
478 author = {Böhm, Haye},
479 month = jan,
480 year = {2019},
481 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},
482 }
483
484 @inproceedings{hentschel_supersensors:_2016,
485 address = {Vienna, Austria},
486 title = {Supersensors: {Raspberry} {Pi} {Devices} for {Smart} {Campus} {Infrastructure}},
487 isbn = {978-1-5090-4052-0},
488 shorttitle = {Supersensors},
489 url = {http://ieeexplore.ieee.org/document/7575844/},
490 doi = {10.1109/FiCloud.2016.16},
491 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.},
492 language = {en},
493 urldate = {2019-09-04},
494 booktitle = {2016 {IEEE} 4th {International} {Conference} on {Future} {Internet} of {Things} and {Cloud} ({FiCloud})},
495 publisher = {IEEE},
496 author = {Hentschel, Kristian and Jacob, Dejice and Singer, Jeremy and Chalmers, Matthew},
497 month = aug,
498 year = {2016},
499 pages = {58--62},
500 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},
501 }
502
503 @inproceedings{feijs_multi-tasking_2013,
504 address = {Wuxi, China},
505 title = {Multi-tasking and {Arduino} : why and how?},
506 isbn = {978-90-386-3462-3},
507 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.},
508 language = {English},
509 booktitle = {Design and semantics of form and movement. 8th {International} {Conference} on {Design} and {Semantics} of {Form} and {Movement} ({DeSForM} 2013)},
510 author = {Feijs, Loe},
511 editor = {Chen, L. L. and Djajadiningrat, T. and Feijs, L. M. G. and Fraser, S. and Hu, J. and Kyffin, S. and Steffen, D.},
512 year = {2013},
513 pages = {119--127},
514 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},
515 }
516
517 @misc{achten_clean_2007,
518 title = {Clean for {Haskell98} {Programmers}},
519 url = {https://www.mbsd.cs.ru.nl/publications/papers/2007/achp2007-CleanHaskellQuickGuide.pdf},
520 language = {en},
521 author = {Achten, Peter},
522 month = jul,
523 year = {2007},
524 file = {Achten - Clean for Haskell98 Programmers.pdf:/home/mrl/.local/share/zotero/storage/69WWSGLF/Achten - Clean for Haskell98 Programmers.pdf:application/pdf},
525 }
526
527 @inproceedings{baccelli_reprogramming_2018,
528 title = {Reprogramming {Low}-end {IoT} {Devices} from the {Cloud}},
529 booktitle = {2018 3rd {Cloudification} of the {Internet} of {Things} ({CIoT})},
530 publisher = {IEEE},
531 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},
532 year = {2018},
533 pages = {1--6},
534 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},
535 }
536
537 @mastersthesis{piers_task-oriented_2016,
538 address = {Nijmegen},
539 title = {Task-{Oriented} {Programming} for developing non-distributed interruptible embedded systems},
540 language = {en},
541 school = {Radboud University},
542 author = {Piers, Jasper},
543 year = {2016},
544 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},
545 }
546
547 @inproceedings{baccelli_scripting_2018,
548 title = {Scripting {Over}-{The}-{Air}: {Towards} {Containers} on {Low}-end {Devices} in the {Internet} of {Things}},
549 booktitle = {{IEEE} {PerCom} 2018},
550 author = {Baccelli, Emmanuel and Doerr, Joerg and Kikuchi, Shinji and Padilla, Francisco and Schleiser, Kaspar and Thomas, Ian},
551 year = {2018},
552 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},
553 }
554
555 @mastersthesis{amazonas_cabral_de_andrade_developing_2018,
556 address = {Nijmegen},
557 title = {Developing {Real} {Life}, {Task} {Oriented} {Applications} for the {Internet} of {Things}},
558 shorttitle = {Developing {Real} {Life}, {TOP} {Applications} for the {IOT}},
559 language = {en},
560 school = {Radboud University},
561 author = {Amazonas Cabral de Andrade, Matheus},
562 year = {2018},
563 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},
564 }
565
566 @article{swierstra_data_2008,
567 title = {Data types à la carte},
568 volume = {18},
569 doi = {10.1017/S0956796808006758},
570 number = {4},
571 journal = {Journal of functional programming},
572 author = {Swierstra, Wouter},
573 year = {2008},
574 pages = {423--436},
575 file = {swierstra2008.pdf:/home/mrl/.local/share/zotero/storage/BEQKBXWP/swierstra2008.pdf:application/pdf},
576 }
577
578 @article{groningen_exchanging_2010,
579 title = {Exchanging sources between {Clean} and {Haskell}: {A} double-edged front end for the {Clean} compiler},
580 volume = {45},
581 shorttitle = {Exchanging sources between {Clean} and {Haskell}},
582 number = {11},
583 journal = {ACM Sigplan Notices},
584 author = {Groningen, John van and Noort, Thomas van and Achten, Peter and Koopman, Pieter and Plasmeijer, Rinus},
585 year = {2010},
586 pages = {49--60},
587 file = {groj10-Haskell_front_end_Clean.pdf:/home/mrl/.local/share/zotero/storage/WVZWX8WT/groj10-Haskell_front_end_Clean.pdf:application/pdf},
588 }
589
590 @article{plasmeijer_itasks:_2007,
591 title = {{iTasks}: executable specifications of interactive work flow systems for the web},
592 volume = {42},
593 number = {9},
594 journal = {ACM SIGPLAN Notices},
595 author = {Plasmeijer, Rinus and Achten, Peter and Koopman, Pieter},
596 year = {2007},
597 pages = {141--152},
598 file = {plar2007-ICFP07-iTasks.pdf:/home/mrl/.local/share/zotero/storage/N8EUZP7D/plar2007-ICFP07-iTasks.pdf:application/pdf},
599 }
600
601 @incollection{plasmeijer_shallow_2016,
602 address = {Cham},
603 series = {Lecture {Notes} in {Computer} {Science}},
604 title = {A {Shallow} {Embedded} {Type} {Safe} {Extendable} {DSL} for the {Arduino}},
605 volume = {9547},
606 isbn = {978-3-319-39110-6},
607 url = {http://link.springer.com/10.1007/978-3-319-39110-6},
608 urldate = {2017-02-22},
609 booktitle = {Trends in {Functional} {Programming}},
610 publisher = {Springer International Publishing},
611 author = {Plasmeijer, Rinus and Koopman, Pieter},
612 year = {2016},
613 doi = {10.1007/978-3-319-39110-6},
614 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},
615 }
616
617 @inproceedings{cheney_lightweight_2002,
618 title = {A lightweight implementation of generics and dynamics},
619 url = {http://dl.acm.org/citation.cfm?id=581698},
620 doi = {10.1145/581690.581698},
621 urldate = {2017-05-15},
622 booktitle = {Proceedings of the 2002 {ACM} {SIGPLAN} workshop on {Haskell}},
623 publisher = {ACM},
624 author = {Cheney, James and Hinze, Ralf},
625 year = {2002},
626 note = {event-place: Pittsburgh Pennsylvania, USA},
627 keywords = {dynamic typing, generic programming, type representations},
628 pages = {90--104},
629 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},
630 }
631
632 @article{lilis_survey_2019,
633 title = {A {Survey} of {Metaprogramming} {Languages}},
634 volume = {52},
635 issn = {0360-0300},
636 url = {https://doi.org/10.1145/3354584},
637 doi = {10.1145/3354584},
638 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.},
639 number = {6},
640 journal = {ACM Comput. Surv.},
641 author = {Lilis, Yannis and Savidis, Anthony},
642 month = oct,
643 year = {2019},
644 note = {Place: New York, NY, USA
645 Publisher: Association for Computing Machinery},
646 keywords = {aspect-oriented programming, generative programming, macro systems, meta-object protocols, Metaprogramming, multistage languages, reflection},
647 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},
648 }
649
650 @inproceedings{mainland_why_2007,
651 address = {New York, NY, USA},
652 series = {Haskell '07},
653 title = {Why {It}'s {Nice} to {Be} {Quoted}: {Quasiquoting} for {Haskell}},
654 isbn = {978-1-59593-674-5},
655 url = {https://doi.org/10.1145/1291201.1291211},
656 doi = {10.1145/1291201.1291211},
657 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.},
658 booktitle = {Proceedings of the {ACM} {SIGPLAN} {Workshop} on {Haskell} {Workshop}},
659 publisher = {Association for Computing Machinery},
660 author = {Mainland, Geoffrey},
661 year = {2007},
662 note = {event-place: Freiburg, Germany},
663 keywords = {meta programming, quasiquoting},
664 pages = {73--82},
665 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},
666 }
667
668 @article{tratt_domain_2008,
669 title = {Domain {Specific} {Language} {Implementation} via {Compile}-{Time} {Meta}-{Programming}},
670 volume = {30},
671 issn = {0164-0925},
672 url = {https://doi.org/10.1145/1391956.1391958},
673 doi = {10.1145/1391956.1391958},
674 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.},
675 number = {6},
676 journal = {ACM Trans. Program. Lang. Syst.},
677 author = {Tratt, Laurence},
678 month = oct,
679 year = {2008},
680 note = {Place: New York, NY, USA
681 Publisher: Association for Computing Machinery},
682 keywords = {domain specific languages, compile-time meta-programming, Syntax extension},
683 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},
684 }
685
686 @inproceedings{kariotis_making_2008,
687 address = {New York, NY, USA},
688 series = {Haskell '08},
689 title = {Making {Monads} {First}-{Class} with {Template} {Haskell}},
690 isbn = {978-1-60558-064-7},
691 url = {https://doi.org/10.1145/1411286.1411300},
692 doi = {10.1145/1411286.1411300},
693 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.},
694 booktitle = {Proceedings of the {First} {ACM} {SIGPLAN} {Symposium} on {Haskell}},
695 publisher = {Association for Computing Machinery},
696 author = {Kariotis, Pericles S. and Procter, Adam M. and Harrison, William L.},
697 year = {2008},
698 note = {event-place: Victoria, BC, Canada},
699 keywords = {domain-specific languages, monads, staged programming},
700 pages = {99--110},
701 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},
702 }
703
704 @inproceedings{gill_haskell_2009,
705 address = {Berlin, Heidelberg},
706 title = {A {Haskell} {Hosted} {DSL} for {Writing} {Transformation} {Systems}},
707 isbn = {978-3-642-03034-5},
708 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.},
709 booktitle = {Domain-{Specific} {Languages}},
710 publisher = {Springer Berlin Heidelberg},
711 author = {Gill, Andy},
712 editor = {Taha, Walid Mohamed},
713 year = {2009},
714 pages = {285--309},
715 file = {Gill2009_Chapter_AHaskellHostedDSLForWritingTra.pdf:/home/mrl/.local/share/zotero/storage/I9RJNDYR/Gill2009_Chapter_AHaskellHostedDSLForWritingTra.pdf:application/pdf},
716 }
717
718 @book{peyton_jones_implementation_1987,
719 address = {Hertfordshire},
720 title = {The {Implementation} of {Functional} {Programming} {Languages}},
721 url = {https://www.microsoft.com/en-us/research/publication/the-implementation-of-functional-programming-languages/},
722 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".},
723 publisher = {Prentice Hall},
724 author = {Peyton Jones, Simon},
725 month = jan,
726 year = {1987},
727 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},
728 }
729
730 @inproceedings{sheard_template_2002,
731 address = {New York, NY, USA},
732 series = {Haskell '02},
733 title = {Template {Meta}-{Programming} for {Haskell}},
734 isbn = {1-58113-605-6},
735 url = {https://doi.org/10.1145/581690.581691},
736 doi = {10.1145/581690.581691},
737 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.},
738 booktitle = {Proceedings of the 2002 {ACM} {SIGPLAN} {Workshop} on {Haskell}},
739 publisher = {Association for Computing Machinery},
740 author = {Sheard, Tim and Jones, Simon Peyton},
741 year = {2002},
742 note = {event-place: Pittsburgh, Pennsylvania},
743 keywords = {meta programming, templates},
744 pages = {1--16},
745 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},
746 }
747
748 @inproceedings{seefried_optimising_2004,
749 address = {Berlin, Heidelberg},
750 title = {Optimising {Embedded} {DSLs} {Using} {Template} {Haskell}},
751 isbn = {978-3-540-30175-2},
752 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.},
753 booktitle = {Generative {Programming} and {Component} {Engineering}},
754 publisher = {Springer Berlin Heidelberg},
755 author = {Seefried, Sean and Chakravarty, Manuel and Keller, Gabriele},
756 editor = {Karsai, Gabor and Visser, Eelco},
757 year = {2004},
758 pages = {186--205},
759 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},
760 }
761
762 @article{hammond_automatic_2003,
763 title = {{AUTOMATIC} {SKELETONS} {IN} {TEMPLATE} {HASKELL}},
764 volume = {13},
765 url = {https://doi.org/10.1142/S0129626403001380},
766 doi = {10.1142/S0129626403001380},
767 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.},
768 number = {03},
769 journal = {Parallel Processing Letters},
770 author = {Hammond, Kevin and Berthold, Jost and Loogen, Rita},
771 year = {2003},
772 pages = {413--424},
773 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},
774 }
775
776 @inproceedings{adams_template_2012,
777 address = {New York, NY, USA},
778 series = {Haskell '12},
779 title = {Template {Your} {Boilerplate}: {Using} {Template} {Haskell} for {Efficient} {Generic} {Programming}},
780 isbn = {978-1-4503-1574-6},
781 url = {https://doi.org/10.1145/2364506.2364509},
782 doi = {10.1145/2364506.2364509},
783 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.},
784 booktitle = {Proceedings of the 2012 {Haskell} {Symposium}},
785 publisher = {Association for Computing Machinery},
786 author = {Adams, Michael D. and DuBuisson, Thomas M.},
787 year = {2012},
788 note = {event-place: Copenhagen, Denmark},
789 keywords = {generic programming, scrap your boilerplate, template haskell},
790 pages = {13--24},
791 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},
792 }
793
794 @inproceedings{norell_prototyping_2004,
795 address = {Berlin, Heidelberg},
796 title = {Prototyping {Generic} {Programming} in {Template} {Haskell}},
797 isbn = {978-3-540-27764-4},
798 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.},
799 booktitle = {Mathematics of {Program} {Construction}},
800 publisher = {Springer Berlin Heidelberg},
801 author = {Norell, Ulf and Jansson, Patrik},
802 editor = {Kozen, Dexter},
803 year = {2004},
804 pages = {314--333},
805 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},
806 }
807
808 @incollection{odonnell_embedding_2004,
809 address = {Berlin, Heidelberg},
810 title = {Embedding a {Hardware} {Description} {Language} in {Template} {Haskell}},
811 isbn = {978-3-540-25935-0},
812 url = {https://doi.org/10.1007/978-3-540-25935-0_9},
813 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.},
814 booktitle = {Domain-{Specific} {Program} {Generation}: {International} {Seminar}, {Dagstuhl} {Castle}, {Germany}, {March} 23-28, 2003. {Revised} {Papers}},
815 publisher = {Springer Berlin Heidelberg},
816 author = {O'Donnell, John T.},
817 editor = {Lengauer, Christian and Batory, Don and Consel, Charles and Odersky, Martin},
818 year = {2004},
819 doi = {10.1007/978-3-540-25935-0_9},
820 pages = {143--164},
821 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},
822 }
823
824 @misc{lynagh_unrolling_2003,
825 title = {Unrolling and {Simplifying} {Expressions} with {Template} {Haskell}},
826 url = {http://web.comlab.ox.ac.uk/oucl/work/ian.lynagh/papers/},
827 urldate = {2021-09-07},
828 author = {Lynagh, Ian},
829 month = may,
830 year = {2003},
831 file = {10.1.1.5.9813.pdf:/home/mrl/.local/share/zotero/storage/G4AFM8XZ/10.1.1.5.9813.pdf:application/pdf},
832 }
833
834 @article{elliott_compiling_2003,
835 title = {Compiling embedded languages},
836 volume = {13},
837 doi = {10.1017/S0956796802004574},
838 number = {3},
839 journal = {Journal of Functional Programming},
840 author = {Elliott, Conal and Finne, Sigbjørn and de Moor, Oege},
841 year = {2003},
842 note = {Publisher: Cambridge University Press},
843 pages = {455--481},
844 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},
845 }
846
847 @incollection{czarnecki_dsl_2004,
848 address = {Berlin, Heidelberg},
849 title = {{DSL} {Implementation} in {MetaOCaml}, {Template} {Haskell}, and {C}++},
850 isbn = {978-3-540-25935-0},
851 url = {https://doi.org/10.1007/978-3-540-25935-0_4},
852 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.},
853 booktitle = {Domain-{Specific} {Program} {Generation}: {International} {Seminar}, {Dagstuhl} {Castle}, {Germany}, {March} 23-28, 2003. {Revised} {Papers}},
854 publisher = {Springer Berlin Heidelberg},
855 author = {Czarnecki, Krzysztof and O'Donnell, John T. and Striegnitz, Jörg and Taha, Walid},
856 editor = {Lengauer, Christian and Batory, Don and Consel, Charles and Odersky, Martin},
857 year = {2004},
858 doi = {10.1007/978-3-540-25935-0_4},
859 pages = {51--72},
860 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},
861 }
862
863 @inproceedings{sheard_accomplishments_2001,
864 address = {Berlin, Heidelberg},
865 title = {Accomplishments and {Research} {Challenges} in {Meta}-programming},
866 isbn = {978-3-540-44806-8},
867 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.},
868 booktitle = {Semantics, {Applications}, and {Implementation} of {Program} {Generation}},
869 publisher = {Springer Berlin Heidelberg},
870 author = {Sheard, Tim},
871 editor = {Taha, Walid},
872 year = {2001},
873 pages = {2--44},
874 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},
875 }
876
877 @inproceedings{kohlbecker_hygienic_1986,
878 address = {New York, NY, USA},
879 series = {{LFP} '86},
880 title = {Hygienic {Macro} {Expansion}},
881 isbn = {0-89791-200-4},
882 url = {https://doi.org/10.1145/319838.319859},
883 doi = {10.1145/319838.319859},
884 booktitle = {Proceedings of the 1986 {ACM} {Conference} on {LISP} and {Functional} {Programming}},
885 publisher = {Association for Computing Machinery},
886 author = {Kohlbecker, Eugene and Friedman, Daniel P. and Felleisen, Matthias and Duba, Bruce},
887 year = {1986},
888 note = {event-place: Cambridge, Massachusetts, USA},
889 pages = {151--161},
890 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},
891 }
892
893 @inproceedings{lammel_scrap_2003,
894 address = {New York, NY, USA},
895 series = {{TLDI} '03},
896 title = {Scrap {Your} {Boilerplate}: {A} {Practical} {Design} {Pattern} for {Generic} {Programming}},
897 isbn = {1-58113-649-8},
898 url = {https://doi.org/10.1145/604174.604179},
899 doi = {10.1145/604174.604179},
900 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.},
901 booktitle = {Proceedings of the 2003 {ACM} {SIGPLAN} {International} {Workshop} on {Types} in {Languages} {Design} and {Implementation}},
902 publisher = {Association for Computing Machinery},
903 author = {Lämmel, Ralf and Jones, Simon Peyton},
904 year = {2003},
905 note = {event-place: New Orleans, Louisiana, USA},
906 keywords = {generic programming, rank-2 types, traversal, type cast},
907 pages = {26--37},
908 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},
909 }
910
911 @inproceedings{bawden_quasiquotation_1999,
912 address = {Aarhus, Denmark},
913 series = {{BRICS} {Notes} {Series}},
914 title = {Quasiquotation in {Lisp}},
915 volume = {NS-99-1},
916 doi = {10.1.1.22.1290},
917 booktitle = {O. {Danvy}, {Ed}., {University} of {Aarhus}, {Dept}. of {Computer} {Science}},
918 publisher = {BRICS},
919 author = {Bawden, Alan},
920 year = {1999},
921 pages = {88--99},
922 file = {Bawden - 1999 - Quasiquotation in Lisp.pdf:/home/mrl/.local/share/zotero/storage/CIFANZAW/Bawden - 1999 - Quasiquotation in Lisp.pdf:application/pdf},
923 }
924
925 @inproceedings{clifton-everest_embedding_2014,
926 address = {Cham},
927 title = {Embedding {Foreign} {Code}},
928 isbn = {978-3-319-04132-2},
929 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.},
930 booktitle = {Practical {Aspects} of {Declarative} {Languages}},
931 publisher = {Springer International Publishing},
932 author = {Clifton-Everest, Robert and McDonell, Trevor L. and Chakravarty, Manuel M. T. and Keller, Gabriele},
933 editor = {Flatt, Matthew and Guo, Hai-Feng},
934 year = {2014},
935 pages = {136--151},
936 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},
937 }
938
939 @inproceedings{shioda_libdsl_2014,
940 address = {New York, NY, USA},
941 series = {{GPCE} 2014},
942 title = {{LibDSL}: {A} {Library} for {Developing} {Embedded} {Domain} {Specific} {Languages} in d via {Template} {Metaprogramming}},
943 isbn = {978-1-4503-3161-6},
944 url = {https://doi.org/10.1145/2658761.2658770},
945 doi = {10.1145/2658761.2658770},
946 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.},
947 booktitle = {Proceedings of the 2014 {International} {Conference} on {Generative} {Programming}: {Concepts} and {Experiences}},
948 publisher = {Association for Computing Machinery},
949 author = {Shioda, Masato and Iwasaki, Hideya and Sato, Shigeyuki},
950 year = {2014},
951 note = {event-place: Västerås, Sweden},
952 keywords = {Metaprogramming, D language, Embedded domain specific languages, Library},
953 pages = {63--72},
954 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},
955 }
956
957 @inproceedings{duregard_embedded_2011,
958 address = {New York, NY, USA},
959 series = {Haskell '11},
960 title = {Embedded {Parser} {Generators}},
961 isbn = {978-1-4503-0860-1},
962 url = {https://doi.org/10.1145/2034675.2034689},
963 doi = {10.1145/2034675.2034689},
964 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.},
965 booktitle = {Proceedings of the 4th {ACM} {Symposium} on {Haskell}},
966 publisher = {Association for Computing Machinery},
967 author = {Duregård, Jonas and Jansson, Patrik},
968 year = {2011},
969 note = {event-place: Tokyo, Japan},
970 keywords = {domain specific languages, metaprogramming},
971 pages = {107--117},
972 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},
973 }
974
975 @inproceedings{eisenberg_promoting_2014,
976 address = {New York, NY, USA},
977 series = {Haskell '14},
978 title = {Promoting {Functions} to {Type} {Families} in {Haskell}},
979 isbn = {978-1-4503-3041-1},
980 url = {https://doi.org/10.1145/2633357.2633361},
981 doi = {10.1145/2633357.2633361},
982 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.},
983 booktitle = {Proceedings of the 2014 {ACM} {SIGPLAN} {Symposium} on {Haskell}},
984 publisher = {Association for Computing Machinery},
985 author = {Eisenberg, Richard A. and Stolarek, Jan},
986 year = {2014},
987 note = {event-place: Gothenburg, Sweden},
988 keywords = {Haskell, defunctionalization, type-level programming},
989 pages = {95--106},
990 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},
991 }
992
993 @inproceedings{viera_staged_2018,
994 address = {New York, NY, USA},
995 series = {{IFL} 2018},
996 title = {A {Staged} {Embedding} of {Attribute} {Grammars} in {Haskell}},
997 isbn = {978-1-4503-7143-8},
998 url = {https://doi.org/10.1145/3310232.3310235},
999 doi = {10.1145/3310232.3310235},
1000 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.},
1001 booktitle = {Proceedings of the 30th {Symposium} on {Implementation} and {Application} of {Functional} {Languages}},
1002 publisher = {Association for Computing Machinery},
1003 author = {Viera, Marcos and Balestrieri, Florent and Pardo, Alberto},
1004 year = {2018},
1005 note = {event-place: Lowell, MA, USA},
1006 keywords = {Haskell, EDSL, Attribute Grammars, Dynamics, Staging},
1007 pages = {95--106},
1008 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},
1009 }
1010
1011 @incollection{kiselyov_typed_2012,
1012 address = {Berlin, Heidelberg},
1013 title = {Typed {Tagless} {Final} {Interpreters}},
1014 isbn = {978-3-642-32202-0},
1015 url = {https://doi.org/10.1007/978-3-642-32202-0_3},
1016 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.},
1017 booktitle = {Generic and {Indexed} {Programming}: {International} {Spring} {School}, {SSGIP} 2010, {Oxford}, {UK}, {March} 22-26, 2010, {Revised} {Lectures}},
1018 publisher = {Springer Berlin Heidelberg},
1019 author = {Kiselyov, Oleg},
1020 editor = {Gibbons, Jeremy},
1021 year = {2012},
1022 doi = {10.1007/978-3-642-32202-0_3},
1023 pages = {130--174},
1024 file = {Kiselyov - 2012 - Typed Tagless Final Interpreters.pdf:/home/mrl/.local/share/zotero/storage/9NBYZLRP/Kiselyov - 2012 - Typed Tagless Final Interpreters.pdf:application/pdf},
1025 }
1026
1027 @article{laufer_type_1996,
1028 title = {Type classes with existential types},
1029 volume = {6},
1030 doi = {10.1017/S0956796800001817},
1031 number = {3},
1032 journal = {Journal of Functional Programming},
1033 author = {Läufer, Konstantin},
1034 year = {1996},
1035 note = {Publisher: Cambridge University Press},
1036 pages = {485--518},
1037 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},
1038 }
1039
1040 @incollection{hinze_fun_2003,
1041 address = {Palgrave},
1042 series = {Cornerstones of {Computing}},
1043 title = {Fun {With} {Phantom} {Types}},
1044 isbn = {978-0-333-99285-2},
1045 booktitle = {The {Fun} of {Programming}},
1046 publisher = {Bloomsbury Publishing},
1047 author = {Hinze, Ralf},
1048 editor = {Gibbons, Jeremy and de Moor, Oege},
1049 year = {2003},
1050 pages = {245--262},
1051 }
1052
1053 @inproceedings{boulton_experience_1992,
1054 address = {North-Holland},
1055 title = {Experience with embedding hardware description languages in {HOL}},
1056 volume = {10},
1057 isbn = {0-444-89686-4},
1058 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.},
1059 language = {en},
1060 booktitle = {{IFIP} {TC10}/{WG}},
1061 publisher = {Elsevier},
1062 author = {Boulton, Richard and Gordon, Andrew and Gordon, Mike and Harrison, John and Herbert, John and Tassel, John Van},
1063 editor = {Stavridou, Victoria and Melham, Thomas F. and Boute, Raymond T.},
1064 year = {1992},
1065 note = {event-place: Nijmegen, NL},
1066 pages = {129--156},
1067 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},
1068 }
1069
1070 @inproceedings{terei_safe_2012,
1071 address = {New York, NY, USA},
1072 series = {Haskell '12},
1073 title = {Safe {Haskell}},
1074 isbn = {978-1-4503-1574-6},
1075 url = {https://doi.org/10.1145/2364506.2364524},
1076 doi = {10.1145/2364506.2364524},
1077 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.},
1078 booktitle = {Proceedings of the 2012 {Haskell} {Symposium}},
1079 publisher = {Association for Computing Machinery},
1080 author = {Terei, David and Marlow, Simon and Peyton Jones, Simon and Mazières, David},
1081 year = {2012},
1082 note = {event-place: Copenhagen, Denmark},
1083 keywords = {haskell, security, type safety},
1084 pages = {137--148},
1085 file = {2364506.2364524.pdf:/home/mrl/.local/share/zotero/storage/5SMB272R/2364506.2364524.pdf:application/pdf},
1086 }
1087
1088 @techreport{leijen_parsec_2001,
1089 address = {Utrecht},
1090 title = {Parsec: {Direct} {Style} {Monadic} {Parser} {Combinators} {For} {The} {Real} {World}},
1091 language = {en},
1092 number = {UU-CS-2001-27},
1093 institution = {Universiteit Utrecht},
1094 author = {Leijen, Daan and Meijer, Erik},
1095 year = {2001},
1096 pages = {22},
1097 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},
1098 }
1099
1100 @inproceedings{gibbons_folding_2014,
1101 address = {New York, NY, USA},
1102 series = {{ICFP} '14},
1103 title = {Folding {Domain}-{Specific} {Languages}: {Deep} and {Shallow} {Embeddings} ({Functional} {Pearl})},
1104 isbn = {978-1-4503-2873-9},
1105 url = {https://doi.org/10.1145/2628136.2628138},
1106 doi = {10.1145/2628136.2628138},
1107 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.},
1108 booktitle = {Proceedings of the 19th {ACM} {SIGPLAN} {International} {Conference} on {Functional} {Programming}},
1109 publisher = {Association for Computing Machinery},
1110 author = {Gibbons, Jeremy and Wu, Nicolas},
1111 year = {2014},
1112 note = {event-place: Gothenburg, Sweden},
1113 keywords = {domain-specific languages, deep and shallow embedding, folds},
1114 pages = {339--347},
1115 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},
1116 }
1117
1118 @inproceedings{oliveira_typecase_2005,
1119 address = {New York, NY, USA},
1120 series = {Haskell '05},
1121 title = {{TypeCase}: {A} {Design} {Pattern} for {Type}-{Indexed} {Functions}},
1122 isbn = {1-59593-071-X},
1123 url = {https://doi.org/10.1145/1088348.1088358},
1124 doi = {10.1145/1088348.1088358},
1125 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.},
1126 booktitle = {Proceedings of the 2005 {ACM} {SIGPLAN} {Workshop} on {Haskell}},
1127 publisher = {Association for Computing Machinery},
1128 author = {Oliveira, Bruno C. d. S. and Gibbons, Jeremy},
1129 year = {2005},
1130 note = {event-place: Tallinn, Estonia},
1131 keywords = {generic programming, type classes, type-indexed functions},
1132 pages = {98--109},
1133 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},
1134 }
1135
1136 @inproceedings{odersky_putting_1996,
1137 address = {New York, NY, USA},
1138 series = {{POPL} '96},
1139 title = {Putting {Type} {Annotations} to {Work}},
1140 isbn = {0-89791-769-3},
1141 url = {https://doi.org/10.1145/237721.237729},
1142 doi = {10.1145/237721.237729},
1143 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.},
1144 booktitle = {Proceedings of the 23rd {ACM} {SIGPLAN}-{SIGACT} {Symposium} on {Principles} of {Programming} {Languages}},
1145 publisher = {Association for Computing Machinery},
1146 author = {Odersky, Martin and Läufer, Konstantin},
1147 year = {1996},
1148 note = {event-place: St. Petersburg Beach, Florida, USA},
1149 pages = {54--67},
1150 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},
1151 }
1152
1153 @inproceedings{najd_everything_2016,
1154 address = {New York, NY, USA},
1155 series = {{PEPM} '16},
1156 title = {Everything {Old} is {New} {Again}: {Quoted} {Domain}-{Specific} {Languages}},
1157 isbn = {978-1-4503-4097-7},
1158 url = {https://doi.org/10.1145/2847538.2847541},
1159 doi = {10.1145/2847538.2847541},
1160 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.},
1161 booktitle = {Proceedings of the 2016 {ACM} {SIGPLAN} {Workshop} on {Partial} {Evaluation} and {Program} {Manipulation}},
1162 publisher = {Association for Computing Machinery},
1163 author = {Najd, Shayan and Lindley, Sam and Svenningsson, Josef and Wadler, Philip},
1164 year = {2016},
1165 note = {event-place: St. Petersburg, FL, USA},
1166 keywords = {EDSL, domain-specific language, DSL, embedded language, normalisation, QDSL, quotation, subformula principle},
1167 pages = {25--36},
1168 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},
1169 }
1170
1171 @article{carette_finally_2009,
1172 title = {Finally tagless, partially evaluated: {Tagless} staged interpreters for simpler typed languages},
1173 volume = {19},
1174 doi = {10.1017/S0956796809007205},
1175 number = {5},
1176 journal = {Journal of Functional Programming},
1177 author = {Carette, Jacques and Kiselyov, Oleg and Shan, Chung-Chieh},
1178 year = {2009},
1179 note = {Publisher: Cambridge University Press},
1180 pages = {509--543},
1181 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},
1182 }
1183
1184 @inproceedings{leijen_domain_2000,
1185 address = {New York, NY, USA},
1186 series = {{DSL} '99},
1187 title = {Domain {Specific} {Embedded} {Compilers}},
1188 isbn = {1-58113-255-7},
1189 url = {https://doi.org/10.1145/331960.331977},
1190 doi = {10.1145/331960.331977},
1191 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.},
1192 booktitle = {Proceedings of the 2nd {Conference} on {Domain}-{Specific} {Languages}},
1193 publisher = {Association for Computing Machinery},
1194 author = {Leijen, Daan and Meijer, Erik},
1195 year = {2000},
1196 note = {event-place: Austin, Texas, USA},
1197 pages = {109--122},
1198 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},
1199 }
1200
1201 @incollection{koopman_simulation_2018,
1202 address = {Cham},
1203 title = {Simulation of a {Task}-{Based} {Embedded} {Domain} {Specific} {Language} for the {Internet} of {Things}},
1204 language = {en},
1205 booktitle = {Central {European} {Functional} {Programming} {School}: 7th {Summer} {School}, {CEFP} 2018, {Košice}, {Slovakia}, {January} 2226, 2018, {Revised} {Selected} {Papers}},
1206 publisher = {Springer International Publishing},
1207 author = {Koopman, Pieter and Lubbers, Mart and Plasmeijer, Rinus},
1208 year = {2018},
1209 note = {in-press},
1210 pages = {51},
1211 }
1212
1213 @techreport{plasmeijer_clean_2021,
1214 address = {Nijmegen},
1215 title = {Clean {Language} {Report} version 3.1},
1216 urldate = {2021-12-22},
1217 institution = {Institute for Computing and Information Sciences},
1218 author = {Plasmeijer, Rinus and van Eekelen, Marko and van Groningen, John},
1219 month = dec,
1220 year = {2021},
1221 pages = {127},
1222 file = {CleanLanguageReport.pdf:/home/mrl/.local/share/zotero/storage/I2SDRIH6/CleanLanguageReport.pdf:application/pdf},
1223 }
1224
1225 @inproceedings{nocker_concurrent_1991,
1226 address = {Berlin, Heidelberg},
1227 title = {Concurrent clean},
1228 isbn = {978-3-540-47472-2},
1229 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.},
1230 booktitle = {{PARLE} '91 {Parallel} {Architectures} and {Languages} {Europe}},
1231 publisher = {Springer Berlin Heidelberg},
1232 author = {Nöcker, E. G. J. M. H. and Smetsers, J. E. W. and van Eekelen, M. C. J. D. and Plasmeijer, M. J.},
1233 editor = {Aarts, Emile H. L. and van Leeuwen, Jan and Rem, Martin},
1234 year = {1991},
1235 pages = {202--219},
1236 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},
1237 }
1238
1239 @incollection{mernik_extensible_2013,
1240 address = {Hershey, PA, USA},
1241 title = {Extensible {Languages}: {Blurring} the {Distinction} between {DSL} and {GPL}},
1242 isbn = {978-1-4666-2092-6},
1243 url = {https://services.igi-global.com/resolvedoi/resolve.aspx?doi=10.4018/978-1-4666-2092-6.ch001},
1244 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.},
1245 booktitle = {Formal and {Practical} {Aspects} of {Domain}-{Specific} {Languages}: {Recent} {Developments}},
1246 publisher = {IGI Global},
1247 author = {Verna, Didier},
1248 editor = {Mernik, Marjan},
1249 year = {2013},
1250 doi = {10.4018/978-1-4666-2092-6.ch001},
1251 pages = {1--31},
1252 }
1253
1254 @inproceedings{hudak_modular_1998,
1255 title = {Modular domain specific languages and tools},
1256 doi = {10.1109/ICSR.1998.685738},
1257 booktitle = {Proceedings. {Fifth} {International} {Conference} on {Software} {Reuse} ({Cat}. {No}.{98TB100203})},
1258 author = {Hudak, P.},
1259 year = {1998},
1260 pages = {134--142},
1261 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},
1262 }
1263
1264 @book{fowler_domain_2010,
1265 edition = {1st},
1266 title = {Domain {Specific} {Languages}},
1267 isbn = {0-321-71294-3},
1268 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\#.},
1269 publisher = {Addison-Wesley Professional},
1270 author = {Fowler, Martin},
1271 year = {2010},
1272 file = {Fowler - 2010 - Domain-specific languages.pdf:/home/mrl/.local/share/zotero/storage/YYMYXTZ5/Fowler - 2010 - Domain-specific languages.pdf:application/pdf},
1273 }
1274
1275 @misc{peter_t_lewis_speech_1985,
1276 address = {Washington, D.C.},
1277 type = {Speech},
1278 title = {Speech},
1279 url = {http://www.chetansharma.com/correcting-the-iot-history/},
1280 author = {{Peter T. Lewis}},
1281 month = sep,
1282 year = {1985},
1283 }
1284
1285 @article{weiser_computer_1991,
1286 title = {The {Computer} for the 21 st {Century}},
1287 volume = {265},
1288 language = {en},
1289 number = {3},
1290 journal = {Scientific American},
1291 author = {Weiser, Mark},
1292 month = sep,
1293 year = {1991},
1294 pages = {94--105},
1295 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},
1296 }
1297
1298 @misc{evans_internet_2011,
1299 title = {The {Internet} of {Things}: {How} the {Next} {Evolution} of the {Internet} {Is} {Changing} {Everything}},
1300 url = {https://www.cisco.com/c/dam/en_us/about/ac79/docs/innov/IoT_IBSG_0411FINAL.pdf},
1301 language = {en},
1302 publisher = {Cisco Internet Business Solutions Group (IBSG)},
1303 author = {Evans, Dave},
1304 month = apr,
1305 year = {2011},
1306 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},
1307 }
1308
1309 @inproceedings{ireland_classification_2009,
1310 address = {Cancun, Mexico},
1311 title = {A {Classification} of {Object}-{Relational} {Impedance} {Mismatch}},
1312 isbn = {978-0-7695-3550-0},
1313 doi = {10.1109/DBKDA.2009.11},
1314 booktitle = {First {International} {Conference} on {Advances} in {Databases}, {Knowledge}, and {Data} {Applications}},
1315 publisher = {IEEE},
1316 author = {Ireland, Christopher and Bowers, David and Newton, Michael and Waugh, Kevin},
1317 year = {2009},
1318 pages = {36--43},
1319 }
1320
1321 @inproceedings{steenvoorden_tophat_2019,
1322 address = {New York, NY, USA},
1323 series = {{PPDP} '19},
1324 title = {{TopHat}: {A} {Formal} {Foundation} for {Task}-{Oriented} {Programming}},
1325 isbn = {978-1-4503-7249-7},
1326 url = {https://doi.org/10.1145/3354166.3354182},
1327 doi = {10.1145/3354166.3354182},
1328 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.},
1329 booktitle = {Proceedings of the 21st {International} {Symposium} on {Principles} and {Practice} of {Declarative} {Programming}},
1330 publisher = {Association for Computing Machinery},
1331 author = {Steenvoorden, Tim and Naus, Nico and Klinik, Markus},
1332 year = {2019},
1333 note = {event-place: Porto, Portugal},
1334 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},
1335 }
1336
1337 @incollection{koopman_type-safe_2019,
1338 address = {Cham},
1339 title = {Type-{Safe} {Functions} and {Tasks} in a {Shallow} {Embedded} {DSL} for {Microprocessors}},
1340 isbn = {978-3-030-28346-9},
1341 url = {https://doi.org/10.1007/978-3-030-28346-9_8},
1342 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.},
1343 booktitle = {Central {European} {Functional} {Programming} {School}: 6th {Summer} {School}, {CEFP} 2015, {Budapest}, {Hungary}, {July} 610, 2015, {Revised} {Selected} {Papers}},
1344 publisher = {Springer International Publishing},
1345 author = {Koopman, Pieter and Plasmeijer, Rinus},
1346 editor = {Zsók, Viktória and Porkoláb, Zoltán and Horváth, Zoltán},
1347 year = {2019},
1348 doi = {10.1007/978-3-030-28346-9_8},
1349 pages = {283--340},
1350 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},
1351 }
1352
1353 @techreport{cheney_first-class_2003,
1354 title = {First-class phantom types},
1355 url = {https://ecommons.cornell.edu/handle/1813/5614},
1356 number = {TR2003-1901},
1357 urldate = {2017-05-15},
1358 institution = {Cornell University},
1359 author = {Cheney, James and Hinze, Ralf},
1360 year = {2003},
1361 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},
1362 }
1363
1364 @inproceedings{baars_typing_2002,
1365 address = {New York, NY, USA},
1366 series = {{ICFP} '02},
1367 title = {Typing {Dynamic} {Typing}},
1368 isbn = {1-58113-487-8},
1369 url = {https://doi.org/10.1145/581478.581494},
1370 doi = {10.1145/581478.581494},
1371 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.},
1372 booktitle = {Proceedings of the {Seventh} {ACM} {SIGPLAN} {International} {Conference} on {Functional} {Programming}},
1373 publisher = {Association for Computing Machinery},
1374 author = {Baars, Arthur I. and Swierstra, S. Doaitse},
1375 year = {2002},
1376 note = {event-place: Pittsburgh, PA, USA},
1377 keywords = {coercions, dynamic typing, Haskell, Leibnitz' rule, quantified types, static typing, type equality, typed interpreters},
1378 pages = {157--166},
1379 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},
1380 }
1381
1382 @inproceedings{young_adding_2021,
1383 address = {Berlin, Heidelberg},
1384 title = {On {Adding} {Pattern} {Matching} to {Haskell}-{Based} {Deeply} {Embedded} {Domain} {Specific} {Languages}},
1385 isbn = {978-3-030-67437-3},
1386 url = {https://doi.org/10.1007/978-3-030-67438-0_2},
1387 doi = {10.1007/978-3-030-67438-0_2},
1388 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.},
1389 booktitle = {Practical {Aspects} of {Declarative} {Languages}: 23rd {International} {Symposium}, {PADL} 2021, {Copenhagen}, {Denmark}, {January} 18-19, 2021, {Proceedings}},
1390 publisher = {Springer-Verlag},
1391 author = {Young, David and Grebe, Mark and Gill, Andy},
1392 year = {2021},
1393 note = {event-place: Copenhagen, Denmark},
1394 pages = {20--36},
1395 }
1396
1397 @incollection{hinze_generic_2003,
1398 address = {Berlin, Heidelberg},
1399 title = {Generic {Haskell}: {Practice} and {Theory}},
1400 isbn = {978-3-540-45191-4},
1401 url = {https://doi.org/10.1007/978-3-540-45191-4_1},
1402 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.},
1403 booktitle = {Generic {Programming}: {Advanced} {Lectures}},
1404 publisher = {Springer Berlin Heidelberg},
1405 author = {Hinze, Ralf and Jeuring, Johan},
1406 editor = {Backhouse, Roland and Gibbons, Jeremy},
1407 year = {2003},
1408 doi = {10.1007/978-3-540-45191-4_1},
1409 pages = {1--56},
1410 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},
1411 }
1412
1413 @inproceedings{torrano_strictness_2005,
1414 address = {Bristol, UK},
1415 series = {Trends in {Functional} {Programming}},
1416 title = {Strictness {Analysis} and let-to-case {Transformation} using {Template} {Haskell}},
1417 volume = {6},
1418 isbn = {978-1-84150-176-5},
1419 booktitle = {Revised {Selected} {Papers} from the {Sixth} {Symposium} on {Trends} in {Functional} {Programming}, {TFP} 2005, {Tallinn}, {Estonia}, 23-24 {September} 2005},
1420 publisher = {Intellect},
1421 author = {Torrano, Carmen and Segura, Clara},
1422 editor = {Eekelen, Marko C. J. D. van},
1423 year = {2005},
1424 note = {event-place: Talinn, Estonia},
1425 pages = {429--442},
1426 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},
1427 }
1428
1429 @inproceedings{polak_automatic_2006,
1430 address = {Bristol, UK},
1431 series = {Trends in {Functional} {Programming}},
1432 title = {Automatic {Graphical} {User} {Interface} {Form} {Generation} {Using} {Template} {Haskell}},
1433 volume = {7},
1434 isbn = {978-1-84150-188-8},
1435 booktitle = {Revised {Selected} {Papers} from the {Seventh} {Symposium} on {Trends} in {Functional} {Programming}, {TFP} 2006, {Nottingham}, {United} {Kingdom}, 19-21 {April} 2006},
1436 publisher = {Intellect},
1437 author = {Polak, Gracjan and Jarosz, Janusz},
1438 editor = {Nilsson, Henrik},
1439 year = {2006},
1440 note = {event-place: Nottingham, UK},
1441 pages = {1--11},
1442 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},
1443 }
1444
1445 @phdthesis{antonova_mtask_2022,
1446 address = {Nijmegen},
1447 type = {Bachelor's {Thesis}},
1448 title = {{mTask} {Semantics} and its {Comparison} to {TopHat}},
1449 language = {en},
1450 school = {Radboud University},
1451 author = {Antonova, Elina},
1452 year = {2022},
1453 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},
1454 }
1455
1456 @misc{wadler_expression_1998,
1457 title = {The expression problem},
1458 url = {https://homepages.inf.ed.ac.uk/wadler/papers/expression/expression.txt},
1459 language = {en},
1460 urldate = {2021-02-24},
1461 author = {Wadler, Philip},
1462 month = nov,
1463 year = {1998},
1464 note = {e-mail message, accessed on 2021-02-24},
1465 }
1466
1467 @misc{margaret_deuter_rhapsody_2015,
1468 address = {Oxford},
1469 edition = {Ninth edition},
1470 title = {Rhapsody},
1471 journal = {Oxford Advanced Learner's Dictionary of Current English},
1472 publisher = {Oxford University Press},
1473 author = {{A S Hornby}},
1474 editor = {{Margaret Deuter} and {Jennifer Bradbery} and {Joanna Turnbull}},
1475 year = {2015},
1476 }
1477
1478 @misc{wikipedia_contributors_rhapsody_2022,
1479 title = {Rhapsody (music){Wikipedia}, {The} {Free} {Encyclopedia}},
1480 url = {https://en.wikipedia.org/w/index.php?title=Rhapsody_(music)\&oldid=1068385257},
1481 urldate = {2022-09-06},
1482 journal = {Wikipedia},
1483 author = {{Wikipedia contributors}},
1484 year = {2022},
1485 note = {accessed on: 2022-09-06},
1486 }
1487
1488 @incollection{backus_introduction_1990,
1489 address = {USA},
1490 title = {An {Introduction} to the {Programming} {Language} {FL}},
1491 isbn = {0-201-17236-4},
1492 booktitle = {Research {Topics} in {Functional} {Programming}},
1493 publisher = {Addison-Wesley Longman Publishing Co., Inc.},
1494 author = {Backus, John and Williams, John H. and Wimmers, Edward L.},
1495 year = {1990},
1496 pages = {219--247},
1497 }
1498
1499 @article{achten_ins_1995,
1500 title = {The ins and outs of {Clean} {I}/{O}},
1501 volume = {5},
1502 doi = {10.1017/S0956796800001258},
1503 number = {1},
1504 journal = {Journal of Functional Programming},
1505 author = {Achten, Peter and Plasmeijer, Rinus},
1506 year = {1995},
1507 note = {Publisher: Cambridge University Press},
1508 pages = {81--110},
1509 }
1510
1511 @inproceedings{peyton_jones_imperative_1993,
1512 address = {New York, NY, USA},
1513 series = {{POPL} '93},
1514 title = {Imperative {Functional} {Programming}},
1515 isbn = {0-89791-560-7},
1516 url = {https://doi.org/10.1145/158511.158524},
1517 doi = {10.1145/158511.158524},
1518 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.},
1519 booktitle = {Proceedings of the 20th {ACM} {SIGPLAN}-{SIGACT} {Symposium} on {Principles} of {Programming} {Languages}},
1520 publisher = {Association for Computing Machinery},
1521 author = {Peyton Jones, Simon L. and Wadler, Philip},
1522 year = {1993},
1523 note = {event-place: Charleston, South Carolina, USA},
1524 pages = {71--84},
1525 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},
1526 }
1527
1528 @inproceedings{achten_high_1993,
1529 address = {London},
1530 title = {High {Level} {Specification} of {I}/{O} in {Functional} {Languages}},
1531 isbn = {978-1-4471-3215-8},
1532 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.},
1533 booktitle = {Functional {Programming}, {Glasgow} 1992},
1534 publisher = {Springer London},
1535 author = {Achten, Peter and van Groningen, John and Plasmeijer, Rinus},
1536 editor = {Launchbury, John and Sansom, Patrick},
1537 year = {1993},
1538 pages = {1--17},
1539 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},
1540 }
1541
1542 @inproceedings{pickering_staged_2020,
1543 address = {New York, NY, USA},
1544 series = {Haskell 2020},
1545 title = {Staged {Sums} of {Products}},
1546 isbn = {978-1-4503-8050-8},
1547 url = {https://doi.org/10.1145/3406088.3409021},
1548 doi = {10.1145/3406088.3409021},
1549 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.},
1550 booktitle = {Proceedings of the 13th {ACM} {SIGPLAN} {International} {Symposium} on {Haskell}},
1551 publisher = {Association for Computing Machinery},
1552 author = {Pickering, Matthew and Löh, Andres and Wu, Nicolas},
1553 year = {2020},
1554 note = {event-place: Virtual Event, USA},
1555 keywords = {generic programming, staging},
1556 pages = {122--135},
1557 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},
1558 }
1559
1560 @article{xie_staging_2022,
1561 title = {Staging with {Class}: {A} {Specification} for {Typed} {Template} {Haskell}},
1562 volume = {6},
1563 url = {https://doi.org/10.1145/3498723},
1564 doi = {10.1145/3498723},
1565 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.},
1566 number = {POPL},
1567 journal = {Proc. ACM Program. Lang.},
1568 author = {Xie, Ningning and Pickering, Matthew and Löh, Andres and Wu, Nicolas and Yallop, Jeremy and Wang, Meng},
1569 month = jan,
1570 year = {2022},
1571 note = {Place: New York, NY, USA
1572 Publisher: Association for Computing Machinery},
1573 keywords = {Staging, Type Classes, Typed Template Haskell},
1574 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},
1575 }
1576
1577 @article{rhiger_type-safe_2009,
1578 title = {Type-safe pattern combinators},
1579 volume = {19},
1580 doi = {10.1017/S0956796808007089},
1581 number = {2},
1582 journal = {Journal of Functional Programming},
1583 author = {Rhiger, Morten},
1584 year = {2009},
1585 note = {Publisher: Cambridge University Press},
1586 pages = {145--156},
1587 file = {RHIGER - 2009 - Type-safe pattern combinators.pdf:/home/mrl/.local/share/zotero/storage/D4N7PGBS/RHIGER - 2009 - Type-safe pattern combinators.pdf:application/pdf},
1588 }
1589
1590 @inproceedings{de_vries_true_2014,
1591 address = {New York, NY, USA},
1592 series = {{WGP} '14},
1593 title = {True {Sums} of {Products}},
1594 isbn = {978-1-4503-3042-8},
1595 url = {https://doi.org/10.1145/2633628.2633634},
1596 doi = {10.1145/2633628.2633634},
1597 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.},
1598 booktitle = {Proceedings of the 10th {ACM} {SIGPLAN} {Workshop} on {Generic} {Programming}},
1599 publisher = {Association for Computing Machinery},
1600 author = {de Vries, Edsko and Löh, Andres},
1601 year = {2014},
1602 note = {event-place: Gothenburg, Sweden},
1603 keywords = {lenses, datatype-generic programming, generic views, json, metadata, sums of products, universes},
1604 pages = {83--94},
1605 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},
1606 }
1607
1608 @article{willis_staged_2020,
1609 title = {Staged {Selective} {Parser} {Combinators}},
1610 volume = {4},
1611 url = {https://doi.org/10.1145/3409002},
1612 doi = {10.1145/3409002},
1613 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.},
1614 number = {ICFP},
1615 journal = {Proc. ACM Program. Lang.},
1616 author = {Willis, Jamie and Wu, Nicolas and Pickering, Matthew},
1617 month = aug,
1618 year = {2020},
1619 note = {Place: New York, NY, USA
1620 Publisher: Association for Computing Machinery},
1621 keywords = {combinators, meta-programming, parsers},
1622 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},
1623 }
1624
1625 @inproceedings{pickering_multi-stage_2019,
1626 address = {New York, NY, USA},
1627 series = {Haskell 2019},
1628 title = {Multi-{Stage} {Programs} in {Context}},
1629 isbn = {978-1-4503-6813-1},
1630 url = {https://doi.org/10.1145/3331545.3342597},
1631 doi = {10.1145/3331545.3342597},
1632 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.},
1633 booktitle = {Proceedings of the 12th {ACM} {SIGPLAN} {International} {Symposium} on {Haskell}},
1634 publisher = {Association for Computing Machinery},
1635 author = {Pickering, Matthew and Wu, Nicolas and Kiss, Csongor},
1636 year = {2019},
1637 note = {event-place: Berlin, Germany},
1638 keywords = {metaprogramming, staging, implicits},
1639 pages = {71--84},
1640 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},
1641 }
1642
1643 @article{pickering_specification_2021,
1644 title = {A {Specification} for {Typed} {Template} {Haskell}},
1645 volume = {abs/2112.03653},
1646 url = {https://arxiv.org/abs/2112.03653},
1647 doi = {10.48550/arXiv.2112.03653},
1648 journal = {CoRR},
1649 author = {Pickering, Matthew and Löh, Andres and Wu, Nicolas},
1650 year = {2021},
1651 note = {arXiv: 2112.03653},
1652 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},
1653 }
1654
1655 @book{steenvoorden_tophat_2022,
1656 address = {Nijmegen},
1657 title = {{TopHat}: {Task}-{Oriented} {Programming} with {Style}},
1658 isbn = {978-94-6458-595-7},
1659 shorttitle = {{TopHat}: {TOP} with {Style}},
1660 language = {English},
1661 publisher = {UB Nijmegen},
1662 author = {Steenvoorden, Tim},
1663 year = {2022},
1664 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},
1665 }
1666
1667 @inproceedings{folmer_high-level_2022,
1668 address = {Cham},
1669 title = {High-{Level} {Synthesis} of {Digital} {Circuits} from {Template} {Haskell} and {SDF}-{AP}},
1670 isbn = {978-3-031-15074-6},
1671 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.},
1672 booktitle = {Embedded {Computer} {Systems}: {Architectures}, {Modeling}, and {Simulation}},
1673 publisher = {Springer International Publishing},
1674 author = {Folmer, H. H. and Groote, R. de and Bekooij, M. J. G.},
1675 editor = {Orailoglu, Alex and Reichenbach, Marc and Jung, Matthias},
1676 year = {2022},
1677 pages = {3--27},
1678 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},
1679 }
1680
1681 @article{materzok_generating_2022,
1682 title = {Generating {Circuits} with {Generators}},
1683 volume = {6},
1684 url = {https://doi.org/10.1145/3549821},
1685 doi = {10.1145/3549821},
1686 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.},
1687 number = {ICFP},
1688 journal = {Proc. ACM Program. Lang.},
1689 author = {Materzok, Marek},
1690 month = aug,
1691 year = {2022},
1692 note = {Place: New York, NY, USA
1693 Publisher: Association for Computing Machinery},
1694 keywords = {circuit synthesis, generators, hardware description languages},
1695 file = {Materzok - 2022 - Generating Circuits with Generators.pdf:/home/mrl/.local/share/zotero/storage/LH4Q8J73/Materzok - 2022 - Generating Circuits with Generators.pdf:application/pdf},
1696 }
1697
1698 @article{egi_embedding_2022,
1699 title = {Embedding {Non}-linear {Pattern} {Matching} with {Backtracking} for {Non}-free {Data} {Types} into {Haskell}},
1700 volume = {40},
1701 issn = {1882-7055},
1702 url = {https://doi.org/10.1007/s00354-022-00177-z},
1703 doi = {10.1007/s00354-022-00177-z},
1704 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.},
1705 number = {2},
1706 journal = {New Generation Computing},
1707 author = {Egi, Satoshi and Kawata, Akira and Kori, Mayuko and Ogawa, Hiromi},
1708 month = jul,
1709 year = {2022},
1710 pages = {481--506},
1711 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},
1712 }
1713
1714 @inproceedings{blanchette_liquid_2022,
1715 address = {New York, NY, USA},
1716 series = {Haskell 2022},
1717 title = {Liquid {Proof} {Macros}},
1718 isbn = {978-1-4503-9438-3},
1719 url = {https://doi.org/10.1145/3546189.3549921},
1720 doi = {10.1145/3546189.3549921},
1721 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.},
1722 booktitle = {Proceedings of the 15th {ACM} {SIGPLAN} {International} {Haskell} {Symposium}},
1723 publisher = {Association for Computing Machinery},
1724 author = {Blanchette, Henry and Vazou, Niki and Lampropoulos, Leonidas},
1725 year = {2022},
1726 note = {event-place: Ljubljana, Slovenia},
1727 keywords = {Liquid Haskell, Proof Macros, Tactics},
1728 pages = {27--38},
1729 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},
1730 }
1731
1732 @phdthesis{baaij_digital_2015,
1733 address = {Netherlands},
1734 type = {{PhD} {Thesis}},
1735 title = {Digital circuit in {C}\${\textbackslash}lambda\${aSH}: functional specifications and type-directed synthesis},
1736 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.},
1737 language = {Undefined},
1738 school = {University of Twente},
1739 author = {Baaij, C. P. R.},
1740 month = jan,
1741 year = {2015},
1742 doi = {10.3990/1.9789036538039},
1743 note = {ISBN: 978-90-365-3803-9},
1744 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},
1745 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},
1746 }
1747
1748 @inproceedings{mcdonell_embedded_2022,
1749 address = {New York, NY, USA},
1750 series = {Haskell 2022},
1751 title = {Embedded {Pattern} {Matching}},
1752 isbn = {978-1-4503-9438-3},
1753 url = {https://doi.org/10.1145/3546189.3549917},
1754 doi = {10.1145/3546189.3549917},
1755 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.},
1756 booktitle = {Proceedings of the 15th {ACM} {SIGPLAN} {International} {Haskell} {Symposium}},
1757 publisher = {Association for Computing Machinery},
1758 author = {McDonell, Trevor L. and Meredith, Joshua D. and Keller, Gabriele},
1759 year = {2022},
1760 note = {event-place: Ljubljana, Slovenia},
1761 keywords = {Haskell, algebraic data types, embedded languages, pattern matching},
1762 pages = {123--136},
1763 file = {2108.13114.pdf:/home/mrl/.local/share/zotero/storage/AJAT8AXI/2108.13114.pdf:application/pdf},
1764 }
1765
1766 @phdthesis{krishnamurthi_linguistic_2001,
1767 address = {Houston, USA},
1768 type = {{PhD} {Thesis}},
1769 title = {Linguistic reuse},
1770 school = {Rice University},
1771 author = {Krishnamurthi, Shriram},
1772 year = {2001},
1773 file = {Krishnamurthi - 2001 - Linguistic reuse.PDF:/home/mrl/.local/share/zotero/storage/LSKHFPIS/Krishnamurthi - 2001 - Linguistic reuse.PDF:application/pdf},
1774 }
1775
1776 @misc{ashton_internet_1999,
1777 address = {London, UK},
1778 type = {Presentation},
1779 title = {Internet of {Things}},
1780 author = {Ashton, Kevin},
1781 year = {1999},
1782 note = {Presentation at Proctor \& Gamble},
1783 }
1784
1785 @article{ashton_that_2009,
1786 title = {That ‘{Internet} of {Things}{Thing}},
1787 volume = {22},
1788 number = {7},
1789 journal = {RFID journal},
1790 author = {Ashton, Kevin},
1791 year = {2009},
1792 note = {Publisher: Hauppauge, New York},
1793 pages = {97--114},
1794 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},
1795 }
1796
1797 @phdthesis{van_gemert_task_2022,
1798 address = {Nijmegen},
1799 type = {Bachelor's {Thesis}},
1800 title = {Task {Oriented} {Programming} in {LUA}},
1801 language = {en},
1802 school = {Radboud University},
1803 author = {van Gemert, Dante},
1804 year = {2022},
1805 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},
1806 }
1807
1808 @misc{lijnse_toppyt_2022,
1809 title = {Toppyt},
1810 url = {https://gitlab.com/baslijnse/toppyt},
1811 urldate = {2022-10-07},
1812 author = {Lijnse, Bas},
1813 year = {2022},
1814 }
1815
1816 @article{sun_compositional_2022,
1817 title = {Compositional {Embeddings} of {Domain}-{Specific} {Languages}},
1818 volume = {6},
1819 doi = {10.1145/3563294},
1820 language = {en},
1821 number = {OOPSLA2},
1822 journal = {Proc. ACM Program. Lang.},
1823 author = {Sun, Yaozhu and Dhandhania, Utkarsh and Oliveira, Bruno C. d. S.},
1824 year = {2022},
1825 pages = {34},
1826 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},
1827 }