Results 11  20
of
573
Type classes in Haskell
 ACM Transactions on Programming Languages and Systems
, 1996
"... This paper de nes a set of type inference rules for resolving overloading introduced by type classes. Programs including type classes are transformed into ones which may be typed by the HindleyMilner inference rules. In contrast to other work on type classes, the rules presented here relate directl ..."
Abstract

Cited by 131 (5 self)
 Add to MetaCart
(Show Context)
This paper de nes a set of type inference rules for resolving overloading introduced by type classes. Programs including type classes are transformed into ones which may be typed by the HindleyMilner inference rules. In contrast to other work on type classes, the rules presented here relate directly to user programs. An innovative aspect of this work is the use of secondorder lambda calculus to record type information in the program. 1.
Confluence properties of Weak and Strong Calculi of Explicit Substitutions
 JOURNAL OF THE ACM
, 1996
"... Categorical combinators [12, 21, 43] and more recently oecalculus [1, 23], have been introduced to provide an explicit treatment of substitutions in the calculus. We reintroduce here the ingredients of these calculi in a selfcontained and stepwise way, with a special emphasis on confluence prope ..."
Abstract

Cited by 130 (7 self)
 Add to MetaCart
Categorical combinators [12, 21, 43] and more recently oecalculus [1, 23], have been introduced to provide an explicit treatment of substitutions in the calculus. We reintroduce here the ingredients of these calculi in a selfcontained and stepwise way, with a special emphasis on confluence properties. The main new results of the paper w.r.t. [12, 21, 1, 23] are the following: 1. We present a confluent weak calculus of substitutions, where no variable clashes can be feared. 2. We solve a conjecture raised in [1]: oecalculus is not confluent (it is confluent on ground terms only). This unfortunate result is "repaired" by presenting a confluent version of oecalculus, named the Envcalculus in [23], called here the confluent oecalculus.
On The Power Of Languages For The Manipulation Of Complex Objects
 In Proceedings of International Workshop on Theory and Applications of Nested Relations and Complex Objects
, 1993
"... Various models and languages for describing and manipulating hierarchically structured data have been proposed. Algebraic, calculusbased and logicprogramming oriented languages have all been considered. This paper presents a general model for complex objects, and languages for it based on the thre ..."
Abstract

Cited by 123 (6 self)
 Add to MetaCart
(Show Context)
Various models and languages for describing and manipulating hierarchically structured data have been proposed. Algebraic, calculusbased and logicprogramming oriented languages have all been considered. This paper presents a general model for complex objects, and languages for it based on the three paradigms. The algebraic language generalizes those presented in the literature; it is shown to be related to the functional style of programming advocated by Backus. The notion of domain independence familiar from relational databases is defined, and syntactic restrictions (referred to as safety conditions) on calculus queries are formulated, that guarantee domain independence. The main results are: The domainindependent calculus, the safe calculus, the algebra, and the logicprogramming oriented language have equivalent expressive power. In particular, recursive queries, such as the transitive closure, can be expressed in each of the languages. For this result, the algebra needs the pow...
Unboxed values as first class citizens in a nonstrict functional language
 Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
, 1991
"... The code compiled from a nonstrict functional program usually manipulates heapallocated boxed numbers. Compilers for such languages often go to considerable trouble to optimise operations on boxed numbers into simpler operations on their unboxed forms. These optimisations are usually handled in an ..."
Abstract

Cited by 108 (15 self)
 Add to MetaCart
The code compiled from a nonstrict functional program usually manipulates heapallocated boxed numbers. Compilers for such languages often go to considerable trouble to optimise operations on boxed numbers into simpler operations on their unboxed forms. These optimisations are usually handled in an ad hoc manner in the code generator, because earlier phases of the compiler have no way to talk about unboxed values.
We present a new approach, which makes unboxed values into (nearly) firstclass citizens. The language, including its type system, is extended to handle unboxed values. The optimisation of boxing and unboxing operations can now be reinterpreted as a set of correctnesspreserving program transformations. Indeed the particular transformations required are ones which a compiler would want to implement anyway. The compiler becomes both simpler and more modular.
Two other benefits accrue. Firstly, the results of strictness analysis can be exploited within the same uniform transformational framework. Secondly, new algebraic data types with unboxed components can be declared. Values of these types can be manipulated much more efficiently than the corresponding boxed versions.
Both a static and a dynamic semantics are given for the augmented language. The denotational dynamic semantics is notable for its use of unpointed domains.
A transformationbased optimiser for Haskell
, 1998
"... Many compilers do some of their work by means of correctnesspreserving, and hopefully performanceimproving, program transformations. The Glasgow Haskell Compiler (GHC) takes this idea of "compilation by transformation" as its warcry, trying to express as much as possible of the compilat ..."
Abstract

Cited by 85 (12 self)
 Add to MetaCart
Many compilers do some of their work by means of correctnesspreserving, and hopefully performanceimproving, program transformations. The Glasgow Haskell Compiler (GHC) takes this idea of "compilation by transformation" as its warcry, trying to express as much as possible of the compilation process in the form of program transformations. This paper reports on our practical experience of the transformational approach to compilation, in the context of a substantial compiler.
Typed Concurrent Objects
 In Proceedings of the Eighth European Conference on Object Oriented Programming (ECOOP
"... Based on a namepassing calculus and on its typing system the paper shows how to build several language constructors towards a stronglytyped objectoriented concurrent programming language. The basic calculus incorporates the notions of asynchronous labelled messages, concurrent objects composed of ..."
Abstract

Cited by 72 (10 self)
 Add to MetaCart
(Show Context)
Based on a namepassing calculus and on its typing system the paper shows how to build several language constructors towards a stronglytyped objectoriented concurrent programming language. The basic calculus incorporates the notions of asynchronous labelled messages, concurrent objects composed of labelled methods, and a form of abstraction on processes allowing in particular to declare polymorphic classes. We introduce a notion of values as nameexpressions, and show how to create subclasses of existing classes. A systematic translation of the derived constructors into the basic calculus provides for semantics and for typing rules for the new constructors.
Deriving a Lazy Abstract Machine
 Journal of Functional Programming
, 1997
"... Machine Peter Sestoft Department of Mathematics and Physics Royal Veterinary and Agricultural University Thorvaldsensvej 40, DK1871 Frederiksberg C, Denmark Email: sestoft@dina.kvl.dk Version 6 of March 13, 1996 Abstract We derive a simple abstract machine for lazy evaluation of the lambda cal ..."
Abstract

Cited by 71 (2 self)
 Add to MetaCart
Machine Peter Sestoft Department of Mathematics and Physics Royal Veterinary and Agricultural University Thorvaldsensvej 40, DK1871 Frederiksberg C, Denmark Email: sestoft@dina.kvl.dk Version 6 of March 13, 1996 Abstract We derive a simple abstract machine for lazy evaluation of the lambda calculus, starting from Launchbury's natural semantics. Lazy evaluation here means nonstrict evaluation with sharing of argument evaluation, that is, callbyneed. The machine we derive is a lazy version of Krivine's abstract machine, which was originally designed for callbyname evaluation. We extend it with datatype constructors and base values, so the final machine implements all dynamic aspects of a lazy functional language. 1 Introduction The development of an efficient abstract machine for lazy evaluation usually starts from either a graph reduction machine or an environment machine. Graph reduction machines perform substitution by rewriting the term graph, that is, the program itself...
On Stepwise Explicit Substitution
, 1993
"... This paper starts by setting the ground for a lambda calculus notation that strongly mirrors the two fundamental operations of term construction, namely abstraction and application. In particular, we single out those parts of a term, called items in the paper, that are added during abstraction and a ..."
Abstract

Cited by 69 (56 self)
 Add to MetaCart
This paper starts by setting the ground for a lambda calculus notation that strongly mirrors the two fundamental operations of term construction, namely abstraction and application. In particular, we single out those parts of a term, called items in the paper, that are added during abstraction and application. This item notation proves to be a powerful device for the representation of basic substitution steps, giving rise to different versions of fireduction including local and global fi reduction. In other words substitution, thanks to the new notation, can be easily formalised as an object language notion rather than remaining a meta language one. Such formalisation will have advantages with respect to various areas including functional application and the partial unfolding of definitions. Moreover our substitution is, we believe, the most general to date. This is shown by the fact that our framework can accommodate most of the known reduction strategies, which range from local to...
Using Parameterized Signatures to Express Modular Structure
 POPL'96
, 1996
"... Module systems are a powerful, practical tool for managing the complexity of large software systems. Previous attempts to formulate a typetheoretic foundation for modular programming have been based on existential, dependent, or manifest types. These approaches can be distinguished by their use of ..."
Abstract

Cited by 66 (1 self)
 Add to MetaCart
(Show Context)
Module systems are a powerful, practical tool for managing the complexity of large software systems. Previous attempts to formulate a typetheoretic foundation for modular programming have been based on existential, dependent, or manifest types. These approaches can be distinguished by their use of different quantifiers to package the operations that a module exports together with appropriate implementation types. In each case, the underlying type theory is simple and elegant, but significant and sometimes complex extensions are needed to account for features that are im portant in practical systems, such as separate compilation and propagation of type information between modules. This paper presents a simple typetheoretic fi'amework for modular programming using parameterized signatmes. The use of quantifiers is treated as a necessary, but independent concern. Using familiar concepts of polymorphism, the resulting module system is easy to understaud and admits true separate compilation. It is also very powerful, supporting highorder, polymorphic, and firstclass modules without further extension.