Results 1 -
7 of
7
A Modular Module System
- Journal of Functional Programming
, 2000
"... A simple implementation of an SML-like module system is presented as a module parameterized by a base language and its type-checker. This implementation is useful both as a detailed tutorial on the Harper-Lillibridge-Leroy module system and its implementation, and as a constructive demonstration of ..."
Abstract
-
Cited by 73 (0 self)
- Add to MetaCart
A simple implementation of an SML-like module system is presented as a module parameterized by a base language and its type-checker. This implementation is useful both as a detailed tutorial on the Harper-Lillibridge-Leroy module system and its implementation, and as a constructive demonstration of the applicability of that module system to a wide range of programming languages.
Debugging Programs After Structure-Changing Transformation
, 1997
"... Translators convert a program from one language to another, and are used to solve a wide range of problems, such as the construction of compilers, optimizers, and preprocessors. Although many tools support the creation of translators, these tools do not provide integrated support for debugging the t ..."
Abstract
-
Cited by 7 (0 self)
- Add to MetaCart
Translators convert a program from one language to another, and are used to solve a wide range of problems, such as the construction of compilers, optimizers, and preprocessors. Although many tools support the creation of translators, these tools do not provide integrated support for debugging the translator or the output of the translator. This dissertation investigates the tracking of information necessary to provide debugging capabilities for those translators that are structured as a set of program transformations operating on a tree-based representation. In this setting I describe how basic debugging capabilities can be automatically and transparently defined without semantic knowledge of the languages being translated. Furthermore, advanced debugging support, relying on the semantics of the languages and transformations, can be incorporated into this basic framework in a systematic manner. To evaluate this approach I have constructed Khepera, a program transformation system wit...
Two-level types and parameterized modules
- Journal of Functional Programming
, 2003
"... In this paper, we describe two techniques for the efficient, modularized implementation of a large class of algorithms. We illustrate these techniques using several examples, including efficient generic unification algorithms that use reference cells to encode substitutions, and highly modular langu ..."
Abstract
-
Cited by 7 (0 self)
- Add to MetaCart
In this paper, we describe two techniques for the efficient, modularized implementation of a large class of algorithms. We illustrate these techniques using several examples, including efficient generic unification algorithms that use reference cells to encode substitutions, and highly modular language implementations. We chose these examples to illustrate the following important techniques that we believe many functional programmers would find useful. First, defining recursive data types by splitting them into two levels: a structure defining level, and a recursive knot-tying level. Second, the use of rank-2 polymorphism inside Haskell’s record types to implement a kind of type-parameterized modules. Finally, we explore techniques that allow us to combine already existing recursive Haskell data-types with the highly modular style of programming proposed here. 1
Type Reconstruction Algorithms: A Survey
, 2007
"... Most type reconstruction algorithms can be broadly classified into two distinct categories: unification and substitution based and constraint based. This report is a survey of some of the popular type reconstruction algorithms in the above two categories to promote better understanding of these algo ..."
Abstract
-
Cited by 2 (2 self)
- Add to MetaCart
Most type reconstruction algorithms can be broadly classified into two distinct categories: unification and substitution based and constraint based. This report is a survey of some of the popular type reconstruction algorithms in the above two categories to promote better understanding of these algorithms. We have implemented the above algorithms for a language based on pure lambda calculus extended extended with poylorphic let construct on some non-trivial examples. 1
Two-Level Types and Parameterized Modules (Functional Pearls)
, 2002
"... In this functional pearl, we describe two techniques for the efficient, modularized implementation of a large class of algorithms. We illustrate these techniques using several examples, including efficient generic unification algorithms that use reference cells to encode substitutions, and highly mo ..."
Abstract
- Add to MetaCart
In this functional pearl, we describe two techniques for the efficient, modularized implementation of a large class of algorithms. We illustrate these techniques using several examples, including efficient generic unification algorithms that use reference cells to encode substitutions, and highly modular language implementations.
Interpreting types as abstract values Oleg Kiselyov (FNMOC)
, 2008
"... We expound a view of type checking as evaluation with ‘abstract values’. Whereas dynamic semantics, evaluation, deals with (dynamic) values like 0, 1, etc., static semantics, type checking, deals with approximations like int. A type system is sound if it correctly approximates the dynamic behavior a ..."
Abstract
- Add to MetaCart
We expound a view of type checking as evaluation with ‘abstract values’. Whereas dynamic semantics, evaluation, deals with (dynamic) values like 0, 1, etc., static semantics, type checking, deals with approximations like int. A type system is sound if it correctly approximates the dynamic behavior and predicts its outcome: if the static semantics predicts that a term has the type int, the dynamic evaluation of the term, if it terminates, will yield an integer. As object language, we use simply-typed and let-polymorphic lambda calculi with integers and integer operations as constants. We use Haskell as a metalanguage in which to write evaluators, type checkers, type reconstructors and inferencers for the object language. We explore the deep relation between parametric polymorphism and ‘inlining’. Polymorphic type checking then is an optimization allowing us to type check a polymorphic term at the place of its definition rather than at the places of its use. 1 Introduction: Untyped
A Glance at Polymorphic Types
, 2000
"... We examine cursorily the concept of polymorphism in programming languages. Polymorphism means the ability of a language construct, typically a function, to assume many types. We briefly survey different kinds of polymorphism, but concentrate mainly on predicative parametric polymorphism, which can b ..."
Abstract
- Add to MetaCart
We examine cursorily the concept of polymorphism in programming languages. Polymorphism means the ability of a language construct, typically a function, to assume many types. We briefly survey different kinds of polymorphism, but concentrate mainly on predicative parametric polymorphism, which can be added as a relatively straightforward and consistent extension to simply typed lambda calculus. Issues with type checking polymorphism are also considered, and a sample implementation is provided.

