Results 1  10
of
11
A new notation for arrows
 In International Conference on Functional Programming (ICFP ’01
, 2001
"... The categorical notion of monad, used by Moggi to structure denotational descriptions, has proved to be a powerful tool for structuring combinator libraries. Moreover, the monadic programming style provides a convenient syntax for many kinds of computation, so that each library defines a new sublang ..."
Abstract

Cited by 60 (1 self)
 Add to MetaCart
(Show Context)
The categorical notion of monad, used by Moggi to structure denotational descriptions, has proved to be a powerful tool for structuring combinator libraries. Moreover, the monadic programming style provides a convenient syntax for many kinds of computation, so that each library defines a new sublanguage. Recently, several workers have proposed a generalization of monads, called variously “arrows ” or Freydcategories. The extra generality promises to increase the power, expressiveness and efficiency of the embedded approach, but does not mesh as well with the native abstraction and application. Definitions are typically given in a pointfree style, which is useful for proving general properties, but can be awkward for programming specific instances. In this paper we define a simple extension to the functional language Haskell that makes these new notions of computation more convenient to use. Our language is similar to the monadic style, and has similar reasoning properties. Moreover, it is extensible, in the sense that new combining forms can be defined as expressions in the host language. 1.
Functional BackEnds within the LambdaSigma Calculus
, 1996
"... We define a weak calculus, oe w , as a subsystem of the full calculus with explicit substitutions oe * . We claim that oe w could be the archetypal output language of functional compilers, just as the calculus is their universal input language. Furthermore, oe * could be the adequate theory to e ..."
Abstract

Cited by 20 (0 self)
 Add to MetaCart
We define a weak calculus, oe w , as a subsystem of the full calculus with explicit substitutions oe * . We claim that oe w could be the archetypal output language of functional compilers, just as the calculus is their universal input language. Furthermore, oe * could be the adequate theory to establish the correctness of simplified functional compilers. Here, we illustrate these claims by proving the correctness of four simplified compilers and runtime systems modeled as abstract machines. The four machines we prove are the Krivine machine, the SECD, the FAM and the CAM. Thereby, we give the first formal proofs of Cardelli's FAM and of its compiler.
A Systematic Study of Functional Language Implementations
 ACM Transactions on Programming Languages and Systems
, 1998
"... : We introduce a unified framework to describe, relate, compare and classify functional language implementations. The compilation process is expressed as a succession of program transformations in the common framework. At each step, different transformations model fundamental choices. A benefit of t ..."
Abstract

Cited by 7 (3 self)
 Add to MetaCart
(Show Context)
: We introduce a unified framework to describe, relate, compare and classify functional language implementations. The compilation process is expressed as a succession of program transformations in the common framework. At each step, different transformations model fundamental choices. A benefit of this approach is to structure and decompose the implementation process. The correctness proofs can be tackled independently for each step and amount to proving program transformations in the functional world. This approach also paves the way to formal comparisons by making it possible to estimate the complexity of individual transformations or compositions of them. Our study aims at covering the whole known design space of sequential functional languages implementations. In particular, we consider callbyvalue, callbyname and callbyneed reduction strategies as well as environment and graphbased implementations. We describe for each compilation step the diverse alternatives as program tr...
The Spineless Tagless Gmachine, naturally
, 1998
"... The application of natural semantic specifications of lazy evaluation to areas such as usage analysis, formal profiling and abstract machine construction has shown it to be a useful formalism. This paper introduces several variants and extensions of this specification. The first variant ..."
Abstract

Cited by 5 (0 self)
 Add to MetaCart
The application of natural semantic specifications of lazy evaluation to areas such as usage analysis, formal profiling and abstract machine construction has shown it to be a useful formalism. This paper introduces several variants and extensions of this specification. The first variant
The Next 700 Krivine Machines
 N/P
, 2005
"... The Krivine machine is a simple and natural implementation of the normal weakhead reduction strategy for pure λterms. While its original description has remained unpublished, this machine has served as a basis for many variants, extensions and theoretical studies. In this paper, we present the Kri ..."
Abstract

Cited by 2 (0 self)
 Add to MetaCart
(Show Context)
The Krivine machine is a simple and natural implementation of the normal weakhead reduction strategy for pure λterms. While its original description has remained unpublished, this machine has served as a basis for many variants, extensions and theoretical studies. In this paper, we present the Krivine machine and some wellknown variants in a common framework. Our framework consists of a hierarchy of intermediate languages that are subsets of the λcalculus. The whole implementation process (compiler + abstract machine) is described via a sequence of transformations all of which express an implementation choice. We characterize the essence of the Krivine machine and locate it in the design space of functional language implementations. We show that, even within the particular class of Krivine machines, hundreds of variants can be designed.
A New Notation for Arrows
"... ABSTRACT The categorical notion of monad, used by Moggi to structure denotational descriptions, has proved to be a powerful tool for structuring combinator libraries. Moreover, the monadic programming style provides a convenient syntax for many kinds of computation, so that each library defines a ne ..."
Abstract
 Add to MetaCart
(Show Context)
ABSTRACT The categorical notion of monad, used by Moggi to structure denotational descriptions, has proved to be a powerful tool for structuring combinator libraries. Moreover, the monadic programming style provides a convenient syntax for many kinds of computation, so that each library defines a new sublanguage. Recently, several workers have proposed a generalization of monads, called variously &quot;arrows &quot; or Freydcategories. The extra generality promises to increase the power, expressiveness and efficiency of the embedded approach, but does not mesh as well with the native abstraction and application. Definitions are typically given in a pointfree style, which is useful for proving general properties, but can be awkward for programming specific instances. In this paper we define a simple extension to the functional language Haskell that makes these new notions of computation more convenient to use. Our language is similar to the monadic style, and has similar reasoning properties. Moreover, it is extensible, in the sense that new combining forms can be defined as expressions in the host language.
Décrire Et Comparer Les Implantations De Langages Fonctionnels
, 1996
"... ion avec des environnements partags (As) As ncessite sept nouveaux combinateurs pour exprimer la sauvegarde et la restauration des environnements (dupl e , swap se ), la construction et l'ouverture des fermetures (mkclos, appclos), l'accs aux valeurs (fst, snd), et enfin l'ajout d&ap ..."
Abstract
 Add to MetaCart
ion avec des environnements partags (As) As ncessite sept nouveaux combinateurs pour exprimer la sauvegarde et la restauration des environnements (dupl e , swap se ), la construction et l'ouverture des fermetures (mkclos, appclos), l'accs aux valeurs (fst, snd), et enfin l'ajout d'une fermeture l'environnement (bind). Ils sont dfinis dans L e par dupl e = l e e. push e e o push e e swap se = l s x. l e e. push s x o push e e mkclos = l s x. l e e. push s (x,e) appclos = l s (x,e). push e e o x fst = l e (e,x). push e e snd = l e (e,x). push s x bind = l e e. l s x. push e (e,x) Rmi Douence & Pascal Fradet La correction de As est exprime par la Proprit 4 (R est une fonction changeant la reprsentation des fermetures de (c, e) en push e e o c). Proprit 4 "E R [[ push e () o As [[ E]] ()]] = b E La transformation As peut tre optimise en ajoutant la rgle : As [[ l s x.E]] r = pop se o As [[ E]] r si x n'est pas libre dans E avec pop se = l e e. l s x. push e e Les variables son...
1The Next 700 Krivine Machines
"... Abstract: The Krivine machine is a simple and natural implementation of the normal weakhead reduction strategy for pure λterms. While its original description has remained unpublished, this machine has served as a basis for many variants, extensions and theoretical studies. In this paper, we prese ..."
Abstract
 Add to MetaCart
(Show Context)
Abstract: The Krivine machine is a simple and natural implementation of the normal weakhead reduction strategy for pure λterms. While its original description has remained unpublished, this machine has served as a basis for many variants, extensions and theoretical studies. In this paper, we present the Krivine machine and some wellknown variants in a common framework. Our framework consists of a hierarchy of intermediate languages that are subsets of the λcalculus. The whole implementation process (compiler + abstract machine) is described via a sequence of transformations all of which express an implementation choice. We characterize the essence of the Krivine machine and locate it in the design space of functional language implementations. We show that, even within the particular class of Krivine machines, hundreds of variants can be designed. Keywords: Krivine machine, abstract machines, program transformation, compilation, functional language implementations.
Implementations Part II: CallbyName, CallbyNeed and Graph Reduction
"... appor t de r ech er ch e ..."
(Show Context)
Functional Runtine Systems within the LambdaSigma Calculus y
"... We de ne a weak calculus, w , as a subsystem of the full calculus with explicit substitutions * . We claim that w could be the archetypal output language of functional compilers, just as the calculus is their universal input language. Furthermore, * could be the adequate theory to establish the ..."
Abstract
 Add to MetaCart
(Show Context)
We de ne a weak calculus, w , as a subsystem of the full calculus with explicit substitutions * . We claim that w could be the archetypal output language of functional compilers, just as the calculus is their universal input language. Furthermore, * could be the adequate theory to establish the correctness of functional compilers. Here we illustrate these claims by proving the correctness of four simpli ed compilers and runtime systems modeled as abstract machines. The four machines we prove are the Krivine machine, the SECD, the FAM and the CAM. Thereby, we give the rst formal proofs of Cardelli's FAM and of its compiler.