Binders Unbound

Implementors of compilers, program refactorers, theorem provers, proof checkers, and other systems that manipulate syntax know that dealing with name binding is difficult to do well. Operations such as -equivalence and capture-avoiding substitution seem simple, yet subtle bugs often go undetected. F...

Full description

Bibliographic Details
Main Authors: Weirich, Stephanie, Yorgey, Brent A, Sheard, Tim
Format: Conference Object
Language:unknown
Published: 2011
Subjects:
Online Access:https://repository.upenn.edu/handle/20.500.14332/49803
https://hdl.handle.net/20.500.14332/49803
id ftunivpenn:oai:repository.upenn.edu:20.500.14332/49803
record_format openpolar
spelling ftunivpenn:oai:repository.upenn.edu:20.500.14332/49803 2024-06-09T07:45:04+00:00 Binders Unbound Weirich, Stephanie Yorgey, Brent A Sheard, Tim 2011-09-19 application/pdf https://repository.upenn.edu/handle/20.500.14332/49803 https://hdl.handle.net/20.500.14332/49803 unknown https://repository.upenn.edu/handle/20.500.14332/49803 629 Departmental Papers (CIS) published Computer Sciences Presentation 2011 ftunivpenn https://doi.org/20.500.14332/49803 2024-05-14T23:30:27Z Implementors of compilers, program refactorers, theorem provers, proof checkers, and other systems that manipulate syntax know that dealing with name binding is difficult to do well. Operations such as -equivalence and capture-avoiding substitution seem simple, yet subtle bugs often go undetected. Furthermore, their implementations are tedious, requiring boilerplate code that must be updated whenever the object language definition changes. Many researchers have therefore sought to specify binding syntax declaratively, so that tools can correctly handle the details behind the scenes. This idea has been the inspiration for many new systems (such as Beluga, Delphin, FreshML, FreshOCaml, C ml, FreshLib, and Ott) but there is still room for improvement in expressivity, simplicity and convenience. In this paper, we present a new domain-specific language, UNBOUND, for specifying binding structure. Our language is particularly expressive it supports multiple atom types, pattern binders, type annotations, recursive binders, and nested binding (necessary for telescopes, a feature found in dependently-typed languages). However, our specification language is also simple, consisting of just five basic combinators. We provide a formal semantics for this language derived from a locally nameless representation and prove that it satisfies a number of desirable properties. We also present an implementation of our binding specification language as a GHC Haskell library implementing an embedded domain specific language (EDSL). By using Haskell type constructors to represent binding combinators, we implement the EDSL succinctly using datatype-generic programming. Our implementation supports a number of features necessary for practical programming, including flexibility in the treatment of user-defined types, best effort name preservation (for error messages), and integration with Haskell's monad transformer library. Stephanie Weirich, Brent A. Yorgey, and Tim Sheard. Binders Unbound. In Proceeding of the 16th ACM SIGPLAN ... Conference Object Beluga Beluga* University of Pennsylvania: ScholaryCommons@Penn Handle The ENVELOPE(161.983,161.983,-78.000,-78.000) Haskell ENVELOPE(-64.279,-64.279,-66.749,-66.749)
institution Open Polar
collection University of Pennsylvania: ScholaryCommons@Penn
op_collection_id ftunivpenn
language unknown
topic Computer Sciences
spellingShingle Computer Sciences
Weirich, Stephanie
Yorgey, Brent A
Sheard, Tim
Binders Unbound
topic_facet Computer Sciences
description Implementors of compilers, program refactorers, theorem provers, proof checkers, and other systems that manipulate syntax know that dealing with name binding is difficult to do well. Operations such as -equivalence and capture-avoiding substitution seem simple, yet subtle bugs often go undetected. Furthermore, their implementations are tedious, requiring boilerplate code that must be updated whenever the object language definition changes. Many researchers have therefore sought to specify binding syntax declaratively, so that tools can correctly handle the details behind the scenes. This idea has been the inspiration for many new systems (such as Beluga, Delphin, FreshML, FreshOCaml, C ml, FreshLib, and Ott) but there is still room for improvement in expressivity, simplicity and convenience. In this paper, we present a new domain-specific language, UNBOUND, for specifying binding structure. Our language is particularly expressive it supports multiple atom types, pattern binders, type annotations, recursive binders, and nested binding (necessary for telescopes, a feature found in dependently-typed languages). However, our specification language is also simple, consisting of just five basic combinators. We provide a formal semantics for this language derived from a locally nameless representation and prove that it satisfies a number of desirable properties. We also present an implementation of our binding specification language as a GHC Haskell library implementing an embedded domain specific language (EDSL). By using Haskell type constructors to represent binding combinators, we implement the EDSL succinctly using datatype-generic programming. Our implementation supports a number of features necessary for practical programming, including flexibility in the treatment of user-defined types, best effort name preservation (for error messages), and integration with Haskell's monad transformer library. Stephanie Weirich, Brent A. Yorgey, and Tim Sheard. Binders Unbound. In Proceeding of the 16th ACM SIGPLAN ...
format Conference Object
author Weirich, Stephanie
Yorgey, Brent A
Sheard, Tim
author_facet Weirich, Stephanie
Yorgey, Brent A
Sheard, Tim
author_sort Weirich, Stephanie
title Binders Unbound
title_short Binders Unbound
title_full Binders Unbound
title_fullStr Binders Unbound
title_full_unstemmed Binders Unbound
title_sort binders unbound
publishDate 2011
url https://repository.upenn.edu/handle/20.500.14332/49803
https://hdl.handle.net/20.500.14332/49803
long_lat ENVELOPE(161.983,161.983,-78.000,-78.000)
ENVELOPE(-64.279,-64.279,-66.749,-66.749)
geographic Handle The
Haskell
geographic_facet Handle The
Haskell
genre Beluga
Beluga*
genre_facet Beluga
Beluga*
op_source 629
Departmental Papers (CIS)
published
op_relation https://repository.upenn.edu/handle/20.500.14332/49803
op_doi https://doi.org/20.500.14332/49803
_version_ 1801373989183946752