{
  "name": "generic-programming",
  "publications": [
    {
      "type": "article",
      "journal": "Sci. Comput. Program.",
      "volumenumber": "74",
      "issuenumber": "8",
      "firstpage": 590,
      "lastpage": 628,
      "id": "1b6b4533-f96b-48c6-a52c-62a54268aaff",
      "key": "HinzeL09",
      "title": "Generic programming in 3D",
      "month": "",
      "year": "2009",
      "doi": "http://dx.doi.org/10.1016/j.scico.2007.10.006",
      "note": "",
      "abstract": "Support for generic programming consists of three essential ingredients:\r\nsupport for overloaded functions,\r\na run-time type representation, and\r\na generic view on data.\r\nDifferent approaches to datatype-generic programming occupy different\r\npoints in this design space. In this article, we revisit the \"Scrap\r\nyour boilerplate\" approach and identify its location within the\r\nthree-dimensional design space. The characteristic features of \"Scrap\r\nyour boilerplate\" are its two generic views, the \u0027spine\u0027 view for\r\nconsuming and transforming data, and the \u0027type-spine\u0027 view for\r\nproducing data. We show how to combine these views with different\r\noverloading mechanisms and type representations.\r\n",
      "url": "https://researchr.org/publication/HinzeL09",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/ralf-hinze",
            "id": "354e70d5-1c58-41e2-a891-0336fec32fb9",
            "key": "ralf-hinze",
            "name": "Ralf Hinze"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/andres-l%C3%B6h",
            "id": "b61e18e6-b231-44d5-b663-c06307f81056",
            "key": "andres-löh",
            "name": "Andres Löh"
          },
          "person": {
            "url": "https://researchr.org/profile/andreslh",
            "id": "6695d4b5-7fb8-4f46-8afb-b3cff3c590d7",
            "key": "andreslh",
            "fullname": "Andres Löh"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "sfp",
      "conferenceYear": "",
      "booktitle": "Revised Selected Papers from the Seventh Symposium on Trends in Functional Programming, TFP 2006, Nottingham, United Kingdom, 19-21 April 2006",
      "volume": "7",
      "number": "",
      "series": "Trends in Functional Programming",
      "address": "",
      "organization": "",
      "publisher": "Intellect",
      "editors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/henrik-nilsson",
            "id": "5fc6541a-a788-4be9-8f37-33d884867bbc",
            "key": "henrik-nilsson",
            "name": "Henrik Nilsson"
          }
        }
      ],
      "firstpage": 199,
      "lastpage": 216,
      "id": "44374a2d-8b8c-4f54-94b7-0ce0c95207dc",
      "key": "OliveiraHL06",
      "title": "Extensible and modular generics for the masses",
      "month": "",
      "year": "2006",
      "doi": "",
      "note": "",
      "abstract": "",
      "url": "https://researchr.org/publication/OliveiraHL06",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/bruno-c.-d.-s.-oliveira",
            "id": "d71f99d0-9547-4b1a-93e3-5c0d2c4689cf",
            "key": "bruno-c.-d.-s.-oliveira",
            "name": "Bruno C. D. S. Oliveira"
          },
          "person": {
            "url": "https://researchr.org/profile/brunooliveira",
            "id": "0c0f8fe1-117e-4ca7-ba00-cccc87d511e0",
            "key": "brunooliveira",
            "fullname": "Bruno C. d. S. Oliveira"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/ralf-hinze",
            "id": "354e70d5-1c58-41e2-a891-0336fec32fb9",
            "key": "ralf-hinze",
            "name": "Ralf Hinze"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/andres-l%C3%B6h",
            "id": "b61e18e6-b231-44d5-b663-c06307f81056",
            "key": "andres-löh",
            "name": "Andres Löh"
          },
          "person": {
            "url": "https://researchr.org/profile/andreslh",
            "id": "6695d4b5-7fb8-4f46-8afb-b3cff3c590d7",
            "key": "andreslh",
            "fullname": "Andres Löh"
          }
        }
      ]
    },
    {
      "type": "inproceedings",
      "conference": "",
      "conferenceYear": "",
      "booktitle": "WGP \u002709: Proceedings of the 2009 ACM SIGPLAN workshop on Generic programming",
      "volume": "",
      "number": "",
      "series": "",
      "address": "New York, NY, USA",
      "organization": "",
      "publisher": "ACM",
      "firstpage": 0,
      "lastpage": 0,
      "id": "9b3fa707-6585-4f40-a7be-0427db6c24f8",
      "key": "LLL09diff",
      "title": "Type-safe diff for families of datatypes",
      "month": "",
      "year": "2009",
      "doi": "http://doi.acm.org/10.1145/1596614.1596624",
      "note": "",
      "abstract": "The UNIX diff program finds the difference between two text files\r\nusing 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\r\ndata (e.g. the abstract syntax tree). In a functional programming\r\nlanguage such as Haskell, we can represent this data with a family of (mutually recursive) datatypes. In this paper, we describe a\r\nfunctional, 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\r\nin Agda, a dependently-typed language well-suited to datatype-generic programming. In order to establish the usefulness of our\r\nwork, we show that its efficiency can be improved with memoization and that it can also be defined in Haskell.\r\n",
      "url": "https://researchr.org/publication/LLL09diff",
      "authors": [
        {
          "alias": {
            "url": "https://researchr.org/alias/eelco-lempsink",
            "id": "ce45f112-7959-4716-9c77-942cc56cfc93",
            "key": "eelco-lempsink",
            "name": "Eelco Lempsink"
          },
          "person": {
            "url": "https://researchr.org/profile/eelcolempsink",
            "id": "5282befb-7370-49ff-830c-6a04e80de984",
            "key": "eelcolempsink",
            "fullname": "Eelco Lempsink"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/sean-leather",
            "id": "3bc8e025-ca0f-4e1c-9e08-e3b62b31bd78",
            "key": "sean-leather",
            "name": "Sean Leather"
          },
          "person": {
            "url": "https://researchr.org/profile/seanleather",
            "id": "50006d0d-9574-4f06-b629-af1d01dda3a9",
            "key": "seanleather",
            "fullname": "Sean Leather"
          }
        },
        {
          "alias": {
            "url": "https://researchr.org/alias/andres-l%C3%B6h",
            "id": "b61e18e6-b231-44d5-b663-c06307f81056",
            "key": "andres-löh",
            "name": "Andres Löh"
          },
          "person": {
            "url": "https://researchr.org/profile/andreslh",
            "id": "6695d4b5-7fb8-4f46-8afb-b3cff3c590d7",
            "key": "andreslh",
            "fullname": "Andres Löh"
          }
        }
      ]
    }
  ]
}