+@incollection{backus_introduction_1990,
+ address = {USA},
+ title = {An {Introduction} to the {Programming} {Language} {FL}},
+ isbn = {0-201-17236-4},
+ booktitle = {Research {Topics} in {Functional} {Programming}},
+ publisher = {Addison-Wesley Longman Publishing Co., Inc.},
+ author = {Backus, John and Williams, John H. and Wimmers, Edward L.},
+ year = {1990},
+ pages = {219--247},
+}
+
+@article{achten_ins_1995,
+ title = {The ins and outs of {Clean} {I}/{O}},
+ volume = {5},
+ doi = {10.1017/S0956796800001258},
+ number = {1},
+ journal = {Journal of Functional Programming},
+ author = {Achten, Peter and Plasmeijer, Rinus},
+ year = {1995},
+ note = {Publisher: Cambridge University Press},
+ pages = {81--110},
+}
+
+@inproceedings{peyton_jones_imperative_1993,
+ address = {New York, NY, USA},
+ series = {{POPL} '93},
+ title = {Imperative {Functional} {Programming}},
+ isbn = {0-89791-560-7},
+ url = {https://doi.org/10.1145/158511.158524},
+ doi = {10.1145/158511.158524},
+ abstract = {We present a new model, based on monads, for performing input/output in a non-strict, purely functional language. It is composable, extensible, efficient, requires no extensions to the type system, and extends smoothly to incorporate mixed-language working and in-place array updates.},
+ booktitle = {Proceedings of the 20th {ACM} {SIGPLAN}-{SIGACT} {Symposium} on {Principles} of {Programming} {Languages}},
+ publisher = {Association for Computing Machinery},
+ author = {Peyton Jones, Simon L. and Wadler, Philip},
+ year = {1993},
+ note = {event-place: Charleston, South Carolina, USA},
+ pages = {71--84},
+ file = {Peyton Jones and Wadler - 1993 - Imperative Functional Programming.pdf:/home/mrl/.local/share/zotero/storage/9DQ5V3N3/Peyton Jones and Wadler - 1993 - Imperative Functional Programming.pdf:application/pdf},
+}
+
+@inproceedings{achten_high_1993,
+ address = {London},
+ title = {High {Level} {Specification} of {I}/{O} in {Functional} {Languages}},
+ isbn = {978-1-4471-3215-8},
+ abstract = {The interface with the outside world has always been one of the weakest points of functional languages. It is not easy to incorporate I/O without being allowed to do side-effects. Furthermore, functional languages allow redexes to be evaluated in any order while I/O generally has to be performed in a very specific order. In this paper we present a new solution for the I/O problem which we have incorporated in the language Concurrent Clean. Concurrent Clean offers a linear type system called Unique Types. It makes it possible to define functions with side-effects without violating the functional semantics. Now it is possible to change any object in the world in the way we wanted: e.g. arrays can be updated in-situ, arbitrary file manipulation is possible. We have used this powerful tool among others to create a library for window based I/O. Using an explicit environment passing scheme provides a high-level and elegant functional specification method for I/O, called Event I/O. Now the specification of I/O has become one of the strengths of functional languages: interactive programs written in Concurrent Clean are concise, easy to write and comprehend as well as efficient. The presented solution can in principle be applied for any other functional language as well provided that it actually uses graph rewriting semantics in the implementation.},
+ booktitle = {Functional {Programming}, {Glasgow} 1992},
+ publisher = {Springer London},
+ author = {Achten, Peter and van Groningen, John and Plasmeijer, Rinus},
+ editor = {Launchbury, John and Sansom, Patrick},
+ year = {1993},
+ pages = {1--17},
+ file = {Achten et al. - 1993 - High Level Specification of IO in Functional Lang.pdf:/home/mrl/.local/share/zotero/storage/4QVH7AYC/Achten et al. - 1993 - High Level Specification of IO in Functional Lang.pdf:application/pdf},
+}
+
+@inproceedings{pickering_staged_2020,
+ address = {New York, NY, USA},
+ series = {Haskell 2020},
+ title = {Staged {Sums} of {Products}},
+ isbn = {978-1-4503-8050-8},
+ url = {https://doi.org/10.1145/3406088.3409021},
+ doi = {10.1145/3406088.3409021},
+ abstract = {Generic programming libraries have historically traded efficiency in return for convenience, and the generics-sop library is no exception. It offers a simple, uniform, representation of all datatypes precisely as a sum of products, making it easy to write generic functions. We show how to finally make generics-sop fast through the use of staging with Typed Template Haskell.},
+ booktitle = {Proceedings of the 13th {ACM} {SIGPLAN} {International} {Symposium} on {Haskell}},
+ publisher = {Association for Computing Machinery},
+ author = {Pickering, Matthew and Löh, Andres and Wu, Nicolas},
+ year = {2020},
+ note = {event-place: Virtual Event, USA},
+ keywords = {generic programming, staging},
+ pages = {122--135},
+ file = {Pickering et al. - 2020 - Staged Sums of Products.pdf:/home/mrl/.local/share/zotero/storage/Q6ZWX4YP/Pickering et al. - 2020 - Staged Sums of Products.pdf:application/pdf},
+}
+
+@article{xie_staging_2022,
+ title = {Staging with {Class}: {A} {Specification} for {Typed} {Template} {Haskell}},
+ volume = {6},
+ url = {https://doi.org/10.1145/3498723},
+ doi = {10.1145/3498723},
+ abstract = {Multi-stage programming using typed code quotation is an established technique for writing optimizing code generators with strong type-safety guarantees. Unfortunately, quotation in Haskell interacts poorly with type classes, making it difficult to write robust multi-stage programs. We study this unsound interaction and propose a resolution, staged type class constraints, which we formalize in a source calculus λ⇒ that elaborates into an explicit core calculus F. We show type soundness of both calculi, establishing that well-typed, well-staged source programs always elaborate to well-typed, well-staged core programs, and prove beta and eta rules for code quotations. Our design allows programmers to incorporate type classes into multi-stage programs with confidence. Although motivated by Haskell, it is also suitable as a foundation for other languages that support both overloading and quotation.},
+ number = {POPL},
+ journal = {Proc. ACM Program. Lang.},
+ author = {Xie, Ningning and Pickering, Matthew and Löh, Andres and Wu, Nicolas and Yallop, Jeremy and Wang, Meng},
+ month = jan,
+ year = {2022},
+ note = {Place: New York, NY, USA
+Publisher: Association for Computing Machinery},
+ keywords = {Staging, Type Classes, Typed Template Haskell},
+ file = {Xie et al. - 2022 - Staging with Class A Specification for Typed Temp.pdf:/home/mrl/.local/share/zotero/storage/QGDB5YHR/Xie et al. - 2022 - Staging with Class A Specification for Typed Temp.pdf:application/pdf},
+}
+
+@article{rhiger_type-safe_2009,
+ title = {Type-safe pattern combinators},
+ volume = {19},
+ doi = {10.1017/S0956796808007089},
+ number = {2},
+ journal = {Journal of Functional Programming},
+ author = {Rhiger, Morten},
+ year = {2009},
+ note = {Publisher: Cambridge University Press},
+ pages = {145--156},
+ file = {RHIGER - 2009 - Type-safe pattern combinators.pdf:/home/mrl/.local/share/zotero/storage/D4N7PGBS/RHIGER - 2009 - Type-safe pattern combinators.pdf:application/pdf},
+}
+
+@inproceedings{de_vries_true_2014,
+ address = {New York, NY, USA},
+ series = {{WGP} '14},
+ title = {True {Sums} of {Products}},
+ isbn = {978-1-4503-3042-8},
+ url = {https://doi.org/10.1145/2633628.2633634},
+ doi = {10.1145/2633628.2633634},
+ abstract = {We introduce the sum-of-products (SOP) view for datatype-generic programming (in Haskell). While many of the libraries that are commonly in use today represent datatypes as arbitrary combinations of binary sums and products, SOP reflects the structure of datatypes more faithfully: each datatype is a single n-ary sum, where each component of the sum is a single n-ary product. This representation turns out to be expressible accurately in GHC with today's extensions. The resulting list-like structure of datatypes allows for the definition of powerful high-level traversal combinators, which in turn encourage the definition of generic functions in a compositional and concise style. A major plus of the SOP view is that it allows to separate function-specific metadata from the main structural representation and recombining this information later.},
+ booktitle = {Proceedings of the 10th {ACM} {SIGPLAN} {Workshop} on {Generic} {Programming}},
+ publisher = {Association for Computing Machinery},
+ author = {de Vries, Edsko and Löh, Andres},
+ year = {2014},
+ note = {event-place: Gothenburg, Sweden},
+ keywords = {lenses, datatype-generic programming, generic views, json, metadata, sums of products, universes},
+ pages = {83--94},
+ file = {de Vries and Löh - 2014 - True Sums of Products.pdf:/home/mrl/.local/share/zotero/storage/QHT5IPQA/de Vries and Löh - 2014 - True Sums of Products.pdf:application/pdf},
+}
+
+@article{willis_staged_2020,
+ title = {Staged {Selective} {Parser} {Combinators}},
+ volume = {4},
+ url = {https://doi.org/10.1145/3409002},
+ doi = {10.1145/3409002},
+ abstract = {Parser combinators are a middle ground between the fine control of hand-rolled parsers and the high-level almost grammar-like appearance of parsers created via parser generators. They also promote a cleaner, compositional design for parsers. Historically, however, they cannot match the performance of their counterparts. This paper describes how to compile parser combinators into parsers of hand-written quality. This is done by leveraging the static information present in the grammar by representing it as a tree. However, in order to exploit this information, it will be necessary to drop support for monadic computation since this generates dynamic structure. Selective functors can help recover lost functionality in the absence of monads, and the parser tree can be partially evaluated with staging. This is implemented in a library called Parsley.},
+ number = {ICFP},
+ journal = {Proc. ACM Program. Lang.},
+ author = {Willis, Jamie and Wu, Nicolas and Pickering, Matthew},
+ month = aug,
+ year = {2020},
+ note = {Place: New York, NY, USA
+Publisher: Association for Computing Machinery},
+ keywords = {combinators, meta-programming, parsers},
+ file = {Willis et al. - 2020 - Staged Selective Parser Combinators.pdf:/home/mrl/.local/share/zotero/storage/RCD842QK/Willis et al. - 2020 - Staged Selective Parser Combinators.pdf:application/pdf},
+}
+
+@inproceedings{pickering_multi-stage_2019,
+ address = {New York, NY, USA},
+ series = {Haskell 2019},
+ title = {Multi-{Stage} {Programs} in {Context}},
+ isbn = {978-1-4503-6813-1},
+ url = {https://doi.org/10.1145/3331545.3342597},
+ doi = {10.1145/3331545.3342597},
+ abstract = {Cross-stage persistence is an essential aspect of multi-stage programming that allows a value defined in one stage to be available in another. However, difficulty arises when implicit information held in types, type classes and implicit parameters needs to be persisted. Without a careful treatment of such implicit information—which are pervasive in Haskell—subtle yet avoidable bugs lurk beneath the surface. This paper demonstrates that in multi-stage programming care must be taken when representing quoted terms so that important implicit information is kept in context and not discarded. The approach is formalised with a type-system, and an implementation in GHC is presented that fixes problems of the previous incarnation.},
+ booktitle = {Proceedings of the 12th {ACM} {SIGPLAN} {International} {Symposium} on {Haskell}},
+ publisher = {Association for Computing Machinery},
+ author = {Pickering, Matthew and Wu, Nicolas and Kiss, Csongor},
+ year = {2019},
+ note = {event-place: Berlin, Germany},
+ keywords = {metaprogramming, staging, implicits},
+ pages = {71--84},
+ file = {Pickering et al. - 2019 - Multi-Stage Programs in Context.pdf:/home/mrl/.local/share/zotero/storage/3EW7FM44/Pickering et al. - 2019 - Multi-Stage Programs in Context.pdf:application/pdf},
+}
+
+@article{pickering_specification_2021,
+ title = {A {Specification} for {Typed} {Template} {Haskell}},
+ volume = {abs/2112.03653},
+ url = {https://arxiv.org/abs/2112.03653},
+ doi = {10.48550/arXiv.2112.03653},
+ journal = {CoRR},
+ author = {Pickering, Matthew and Löh, Andres and Wu, Nicolas},
+ year = {2021},
+ note = {arXiv: 2112.03653},
+ file = {Pickering et al. - 2021 - A Specification for Typed Template Haskell.pdf:/home/mrl/.local/share/zotero/storage/YBTN4DLK/Pickering et al. - 2021 - A Specification for Typed Template Haskell.pdf:application/pdf},
+}
+
+@book{steenvoorden_tophat_2022,