Skip to main navigation Skip to search Skip to main content

Staging with Class: A Specification for Typed Template Haskell

  • Ningning Xie
  • , Matthew T Pickering
  • , Andres Loh
  • , Nicolas Wu
  • , Jeremy Yallop
  • , Meng Wang

    Research output: Contribution to journalArticle (Academic Journal)peer-review

    15 Citations (Scopus)
    120 Downloads (Pure)

    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.
    Original languageEnglish
    Article number61
    Number of pages30
    JournalProceedings of the ACM on Programming Languages
    Volume6
    Issue numberPOPL
    DOIs
    Publication statusPublished - 12 Jan 2022

    Bibliographical note

    Funding Information:
    We thank Dimitrios Vytiniotis, and the anonymous reviewers for their insightful comments. The work is partly supported by EPSRC Grant SCOPE: Scoped Contextual Programming with Effects (EP/S028129/1) and Grant EXHIBIT: Expressive High-Level Languages for Bidirectional Transformations (EP/T008911/1).

    Publisher Copyright:
    © 2022 Owner/Author.

    Research Groups and Themes

    • Programming Languages

    Keywords

    • Staging
    • Type Classes
    • Typed Template Haskell

    Fingerprint

    Dive into the research topics of 'Staging with Class: A Specification for Typed Template Haskell'. Together they form a unique fingerprint.

    Cite this