publications: - title: "Extensible and modular generics for the masses" author: - name: "Bruno C. d. S. Oliveira" link: "http://ropas.snu.ac.kr/~bruno/" - name: "Ralf Hinze" link: "https://researchr.org/alias/ralf-hinze" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" year: "2006" tags: - "C++" researchr: "https://researchr.org/publication/OliveiraHL06" cites: 0 citedby: 0 pages: "199-216" booktitle: "sfp" kind: "inproceedings" key: "OliveiraHL06" - title: "Dependency-style generic Haskell" author: - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" - name: "Dave Clarke" link: "http://www.cs.kuleuven.be/~dave/" - name: "Johan Jeuring" link: "http://people.cs.uu.nl/johanj/" year: "2003" doi: "http://doi.acm.org/10.1145/944705.944719" links: doi: "http://doi.acm.org/10.1145/944705.944719" tags: - "Haskell" researchr: "https://researchr.org/publication/LohCJ03" cites: 0 citedby: 0 pages: "141-152" booktitle: "ICFP" kind: "inproceedings" key: "LohCJ03" - title: " Scrap Your Boilerplate Revolutions" author: - name: "Ralf Hinze" link: "https://researchr.org/alias/ralf-hinze" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" year: "2006" doi: "http://dx.doi.org/10.1007/11783596_13" abstract: "Generic programming allows you to write a function once, and use it many times at different types. Traditionally, generic functions are defined by induction on the structure of types. \"Scrap your boilerplate\" (SYB) is a radically different approach that dispatches on the structure of values. In previous work, we have shown how to reconcile both approaches using the concept of generic views: many generic functions can be based either on the classical sum-of-products view or on the view that underlies SYB, the so-called 'spine' view. One distinct advantage of the spine view is its generality: it is applicable to a large class of data types, including generalised algebraic data types. Its main weakness roots in the value-orientation: one can only define generic functions that consume data (show) but not ones that produce data (read). Furthermore, functions that abstract over type constructors (map, reduce) are out of reach. In this paper, we show how to overcome both limitations. The main technical contributions are the 'type spine' view and the 'lifted spine' view." links: doi: "http://dx.doi.org/10.1007/11783596_13" tags: - "rule-based" - "generic programming" - "data-flow programming" - "data-flow" - " algebra" - "programming" - "systematic-approach" researchr: "https://researchr.org/publication/HinzeL06" cites: 0 citedby: 0 pages: "180-208" booktitle: "mpc" kind: "inproceedings" key: "HinzeL06" - title: "Qualified types for MLF" author: - name: "Daan Leijen" link: "https://researchr.org/alias/daan-leijen" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" year: "2005" doi: "http://doi.acm.org/10.1145/1086365.1086385" links: doi: "http://doi.acm.org/10.1145/1086365.1086385" researchr: "https://researchr.org/publication/LeijenL05" cites: 0 citedby: 0 pages: "144-155" booktitle: "ICFP" kind: "inproceedings" key: "LeijenL05" - title: "NixOS: a purely functional Linux distribution" author: - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" year: "2008" doi: "http://doi.acm.org/10.1145/1411204.1411255" abstract: "Existing package and system configuration management tools suffer from an imperative model, where system administration actions such as upgrading packages or changes to system configuration files are stateful: they destructively update the state of the system. This leads to many problems, such as the inability to roll back changes easily, to run multiple versions of a package side-by-side, to reproduce a configuration deterministically on another machine, or to reliably upgrade a system. In this paper we show that we can overcome these problems by moving to a purely functional system configuration model. This means that all static parts of a system (such as software packages, configuration files and system startup scripts) are built by pure functions and are immutable, stored in a way analogously to a heap in a purely function language. We have implemented this model in NixOS, a non-trivial Linux distribution that uses the Nix package manager to build the entire system configuration from a purely functional specification. " links: doi: "http://doi.acm.org/10.1145/1411204.1411255" tags: - "meta-model" - "modeling language" - "language modeling" - "Meta-Environment" - "state machines" researchr: "https://researchr.org/publication/DolstraL08" cites: 0 citedby: 0 pages: "367-378" booktitle: "ICFP" kind: "inproceedings" key: "DolstraL08" - title: "Comparing approaches to generic programming in Haskell" author: - name: "Ralf Hinze" link: "https://researchr.org/alias/ralf-hinze" - name: "Johan Jeuring" link: "http://people.cs.uu.nl/johanj/" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" year: "2007" doi: "10.1.1.74.7121" tags: - "generic programming" - "Haskell" - "programming" - "systematic-approach" researchr: "https://researchr.org/publication/1782896" cites: 0 citedby: 0 booktitle: "SSDGP'06: Proceedings of the 2006 international conference on Datatype-generic programming" kind: "inproceedings" key: "1782896" - title: "Generic programming in 3D" author: - name: "Ralf Hinze" link: "https://researchr.org/alias/ralf-hinze" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" year: "2009" doi: "http://dx.doi.org/10.1016/j.scico.2007.10.006" abstract: "Support for generic programming consists of three essential ingredients: support for overloaded functions, a run-time type representation, and a generic view on data. Different approaches to datatype-generic programming occupy different points in this design space. In this article, we revisit the \"Scrap your boilerplate\" approach and identify its location within the three-dimensional design space. The characteristic features of \"Scrap your boilerplate\" are its two generic views, the 'spine' view for consuming and transforming data, and the 'type-spine' view for producing data. We show how to combine these views with different overloading mechanisms and type representations. " links: doi: "http://dx.doi.org/10.1016/j.scico.2007.10.006" tags: - "generic programming" - "data-flow programming" - "data-flow" - "programming" - "design" - "systematic-approach" researchr: "https://researchr.org/publication/HinzeL09" cites: 0 citedby: 0 journal: "SCP" volume: "74" number: "8" pages: "590-628" kind: "article" key: "HinzeL09" - title: "Report on the tenth ICFP programming contest" author: - name: "Eelco Dolstra" link: "https://researchr.org/profile/eelcodolstra/publications" - name: "Jurriaan Hage" link: "http://www.cs.uu.nl/wiki/Hage/WebHome" - name: "Bastiaan Heeren" link: "http://www.open.ou.nl/bhr/" - name: "Stefan Holdermans" link: "https://researchr.org/alias/stefan-holdermans" - name: "Johan Jeuring" link: "http://people.cs.uu.nl/johanj/" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" - name: "Clara Löh" link: "https://researchr.org/alias/clara-l%C3%B6h" - name: "Arie Middelkoop" link: "https://researchr.org/alias/arie-middelkoop" - name: "Alexey Rodriguez" link: "https://researchr.org/alias/alexey-rodriguez" - name: "John van Schie" link: "https://researchr.org/alias/john-van-schie" year: "2008" doi: "http://doi.acm.org/10.1145/1411204.1411259" abstract: "The ICFP programming contest is a 72-hour contest, which attracts thousands of contestants from all over the world. In this report we describe what it takes to organise this contest, the main ideas behind the contest we organised, the task, how to solve it, how we created it, and how well the contestants did. This year's task was to reverse engineer the DNA of a stranded alien life form to enable it to survive on our planet. The alien's DNA had to be modified by means of a prefix that modified its meaning so that the alien's phenotype would approximate a given \"ideal\" outcome, increasing its probability of survival. About 357 teams from 39 countries solved at least part of the contest. The language of choice for discriminating hackers turned out to be C++. " links: doi: "http://doi.acm.org/10.1145/1411204.1411259" tags: - "programming languages" - "C++" - "programming" researchr: "https://researchr.org/publication/DolstraHHHJLLMRS08" cites: 0 citedby: 0 pages: "397-408" booktitle: "ICFP" kind: "inproceedings" key: "DolstraHHHJLLMRS08" - title: "Parsing permutation phrases" author: - name: "Arthur I. Baars" link: "https://researchr.org/alias/arthur-i.-baars" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" - name: "S. Doaitse Swierstra" link: "http://www.cs.uu.nl/staff/doaitse.html" year: "2004" doi: "http://dx.doi.org/10.1017/S0956796804005143" links: doi: "http://dx.doi.org/10.1017/S0956796804005143" tags: - "parsing" researchr: "https://researchr.org/publication/BaarsLS04" cites: 0 citedby: 0 journal: "JFP" volume: "14" number: "6" pages: "635-646" kind: "article" key: "BaarsLS04" - title: "Type-indexed data types" author: - name: "Ralf Hinze" link: "https://researchr.org/alias/ralf-hinze" - name: "Johan Jeuring" link: "http://people.cs.uu.nl/johanj/" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" year: "2004" doi: "http://dx.doi.org/10.1016/j.scico.2003.07.001" links: doi: "http://dx.doi.org/10.1016/j.scico.2003.07.001" tags: - "data-flow" researchr: "https://researchr.org/publication/HinzeJL04" cites: 0 citedby: 0 journal: "SCP" volume: "51" number: "1-2" pages: "117-151" kind: "article" key: "HinzeJL04" - title: "Type-Indexed Data Types" author: - name: "Ralf Hinze" link: "https://researchr.org/alias/ralf-hinze" - name: "Johan Jeuring" link: "http://people.cs.uu.nl/johanj/" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" year: "2002" doi: "http://link.springer.de/link/service/series/0558/bibs/2386/23860148.htm" links: doi: "http://link.springer.de/link/service/series/0558/bibs/2386/23860148.htm" tags: - "data-flow" researchr: "https://researchr.org/publication/HinzeJL02" cites: 0 citedby: 0 pages: "148-174" booktitle: "mpc" kind: "inproceedings" key: "HinzeJL02" - title: "Type-safe diff for families of datatypes" author: - name: "Eelco Lempsink" link: "http://eelco.lempsink.nl/" - name: "Sean Leather" link: "http://www.cs.uu.nl/staff/leather.html" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" year: "2009" doi: "http://doi.acm.org/10.1145/1596614.1596624" abstract: "The UNIX diff program finds the difference between two text files using a classic algorithm for determining the longest common subsequence; however, when working with structured input (e.g. program code), we often want to find the difference between tree-like data (e.g. the abstract syntax tree). In a functional programming language such as Haskell, we can represent this data with a family of (mutually recursive) datatypes. In this paper, we describe a functional, datatype-generic implementation of diff (and the associated program patch). Our approach requires advanced type system features to preserve type safety; therefore, we present the code in Agda, a dependently-typed language well-suited to datatype-generic programming. In order to establish the usefulness of our work, we show that its efficiency can be improved with memoization and that it can also be defined in Haskell. " links: doi: "http://doi.acm.org/10.1145/1596614.1596624" tags: - "programming languages" - "data-flow language" - "generic programming" - "abstract syntax" - "functional programming" - "Haskell" - "type system" - "data-flow programming" - "data-flow" - "programming" - "systematic-approach" researchr: "https://researchr.org/publication/LLL09diff" cites: 0 citedby: 0 booktitle: "WGP '09: Proceedings of the 2009 ACM SIGPLAN workshop on Generic programming" kind: "inproceedings" key: "LLL09diff" - title: "Open data types and open functions" author: - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" - name: "Ralf Hinze" link: "https://researchr.org/alias/ralf-hinze" year: "2006" doi: "http://doi.acm.org/10.1145/1140335.1140352" 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. " links: doi: "http://doi.acm.org/10.1145/1140335.1140352" tags: - "programming languages" - "semantics" - "expression problem" - "rule-based" - "data-flow language" - "pattern language" - "generic programming" - "exceptions" - "functional programming" - "Haskell" - "data-flow programming" - "data-flow" - "source-to-source" - "pattern matching" - "programming" - "extensible language" - "open-source" - "domain-specific language" researchr: "https://researchr.org/publication/LohH06" cites: 0 citedby: 0 pages: "133-144" booktitle: "ppdp" kind: "inproceedings" key: "LohH06" - title: "Typed Contracts for Functional Programming" author: - name: "Ralf Hinze" link: "https://researchr.org/alias/ralf-hinze" - name: "Johan Jeuring" link: "http://people.cs.uu.nl/johanj/" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" year: "2006" doi: "http://dx.doi.org/10.1007/11737414_15" abstract: "A robust software component fulfills a contract: it expects data satisfying a certain property and promises to return data satisfying another property. The object-oriented community uses the design-by-contract approach extensively. Proposals for language extensions that add contracts to higher-order functional programming have appeared recently. In this paper we propose an embedded domain-specific language for typed, higher-order and first-class contracts, which is both more expressive than previous proposals, and allows for better blame assignment. We take some first steps towards an algebra of contracts, and we show how to define a generic contract combinator for arbitrary algebraic data types. The contract language is implemented as a library in Haskell using the concept of generalised algebraic data types. " links: doi: "http://dx.doi.org/10.1007/11737414_15" tags: - "programming languages" - "object-oriented programming" - "meta programming" - "data-flow language" - "generic programming" - "software components" - "contracts" - "embedded software" - "functional programming" - "software component" - "language design" - "Haskell" - "data-flow programming" - "data-flow" - " algebra" - "programming" - "subject-oriented programming" - "Meta-Environment" - "software contracts" - "design" - "systematic-approach" - "feature-oriented programming" - "meta-objects" - "domain-specific language" researchr: "https://researchr.org/publication/HinzeJL06" cites: 0 citedby: 0 pages: "208-225" booktitle: "FLOPS" kind: "inproceedings" key: "HinzeJL06" - title: "Generic Views on Data Types" author: - name: "Stefan Holdermans" link: "https://researchr.org/alias/stefan-holdermans" - name: "Johan Jeuring" link: "http://people.cs.uu.nl/johanj/" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" - name: "Alexey Rodriguez" link: "https://researchr.org/alias/alexey-rodriguez" year: "2006" doi: "http://dx.doi.org/10.1007/11783596_14" abstract: "A generic function is defined by induction on the structure of types. The structure of a data type can be defined in several ways. For example, in PolyP a pattern functor gives the structure of a data type viewed as a fixed point, and in Generic Haskell a structural representation type gives an isomorphic type view of a data type in terms of sums of products. Depending on this generic view on the structure of data types, some generic functions are easier, more difficult, or even impossible to define. Furthermore, the efficiency of some generic functions can be improved by choosing a different view. This paper introduces generic views on data types and shows why they are useful. Furthermore, it shows how generic views have been added to Generic Haskell, an extension of the functional programming language Haskell that supports the construction of generic functions. The separation between inductive definitions on type structure and generic views allows us to combine many approaches to generic programming in a single framework. " links: doi: "http://dx.doi.org/10.1007/11783596_14" tags: - "programming languages" - "data-flow language" - "pattern language" - "generic programming" - "functional programming" - "Haskell" - "data-flow programming" - "data-flow" - "programming" - "systematic-approach" researchr: "https://researchr.org/publication/HoldermansJLR06" cites: 0 citedby: 0 pages: "209-234" booktitle: "mpc" kind: "inproceedings" key: "HoldermansJLR06" - title: "The Generic Haskell User's Guide" author: - name: "Dave Clarke" link: "http://www.cs.kuleuven.be/~dave/" - name: "Johan Jeuring" link: "http://people.cs.uu.nl/johanj/" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" year: "2001" tags: - "Haskell" researchr: "https://researchr.org/publication/Clarke01thegeneric" cites: 0 citedby: 0 kind: "misc" key: "Clarke01thegeneric" - title: "Formalizing Semantic Bidirectionalization with Dependent Types" author: - name: "Helmut Grohne" link: "https://researchr.org/alias/helmut-grohne" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" - name: "Janis Voigtländer" link: "http://www.iai.uni-bonn.de/~jv/" year: "2014" doi: "http://ceur-ws.org/Vol-1133/paper-12.pdf" links: doi: "http://ceur-ws.org/Vol-1133/paper-12.pdf" dblp: "http://dblp.uni-trier.de/rec/bibtex/conf/edbt/GrohneLV14" researchr: "https://researchr.org/publication/GrohneLV14" cites: 0 citedby: 0 pages: "75-81" booktitle: "edbt" kind: "inproceedings" key: "GrohneLV14" - title: "Generic Haskell, Specifically" author: - name: "Dave Clarke" link: "http://www.cs.kuleuven.be/~dave/" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" year: "2002" tags: - "Haskell" researchr: "https://researchr.org/publication/ClarkeL02" cites: 0 citedby: 0 pages: "21-47" booktitle: "ifip2-1" kind: "inproceedings" key: "ClarkeL02" - title: "Dynamic WWW Structures in 3D" author: - name: "Ulrik Brandes" link: "https://researchr.org/alias/ulrik-brandes" - name: "Vanessa Kääb" link: "https://researchr.org/alias/vanessa-k%C3%A4%C3%A4b" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" - name: "Dorothea Wagner" link: "https://researchr.org/alias/dorothea-wagner" - name: "Thomas Willhalm" link: "https://researchr.org/alias/thomas-willhalm" year: "2000" doi: "http://www.cs.brown.edu/publications/jgaa/accepted/00/Brandes+00.4.3.pdf" links: doi: "http://www.cs.brown.edu/publications/jgaa/accepted/00/Brandes+00.4.3.pdf" researchr: "https://researchr.org/publication/BrandesKLWW00" cites: 0 citedby: 0 journal: "jgaa" volume: "4" number: "3" pages: "183-191" kind: "article" key: "BrandesKLWW00" - title: " Scrap Your Boilerplate Reloaded" author: - name: "Ralf Hinze" link: "https://researchr.org/alias/ralf-hinze" - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" - name: "Bruno C. d. S. Oliveira" link: "http://ropas.snu.ac.kr/~bruno/" year: "2006" doi: "http://dx.doi.org/10.1007/11737414_3" abstract: "The paper \"Scrap your boilerplate\" (SYB) introduces a combinator library for generic programming that offers generic traversals and queries. Classically, support for generic programming consists of two essential ingredients: a way to write (type-)overloaded functions, and independently, a way to access the structure of data types. SYB seems to lack the second. As a consequence, it is difficult to compare with other approaches such as PolyP or Generic Haskell. In this paper we reveal the structural view that SYB builds upon. This allows us to define the combinators as generic functions in the classical sense. We explain the SYB approach in this changed setting from ground up, and use the understanding gained to relate it to other generic programming approaches. Furthermore, we show that the SYB view is applicable to a very large class of data types, including generalized algebraic data types. " links: doi: "http://dx.doi.org/10.1007/11737414_3" tags: - "generic programming" - "traversal" - "Haskell" - "data-flow programming" - "data-flow" - "C++" - " algebra" - "programming" - "systematic-approach" researchr: "https://researchr.org/publication/HinzeLO06" cites: 0 citedby: 0 pages: "13-29" booktitle: "FLOPS" kind: "inproceedings" key: "HinzeLO06" - title: "Proceedings of the ACM SIGPLAN Workshop on Haskell, Haskell 2006, Portland, Oregon, USA, September 17, 2006" year: "2006" tags: - "Haskell" researchr: "https://researchr.org/publication/haskell%3A2006" cites: 0 citedby: 0 booktitle: "Proceedings of the ACM SIGPLAN Workshop on Haskell, Haskell 2006, Portland, Oregon, USA, September 17, 2006" conference: "haskell" editor: - name: "Andres Löh" link: "http://people.cs.uu.nl/andres/" publisher: "ACM" isbn: "1-59593-489-8" kind: "proceedings" key: "haskell:2006"