Results 1  10
of
1,485
Comprehending Monads
 Mathematical Structures in Computer Science
, 1992
"... Category theorists invented monads in the 1960's to concisely express certain aspects of universal algebra. Functional programmers invented list comprehensions in the 1970's to concisely express certain programs involving lists. This paper shows how list comprehensions may be generalised t ..."
Abstract

Cited by 521 (18 self)
 Add to MetaCart
Category theorists invented monads in the 1960's to concisely express certain aspects of universal algebra. Functional programmers invented list comprehensions in the 1970's to concisely express certain programs involving lists. This paper shows how list comprehensions may be generalised to an arbitrary monad, and how the resulting programming feature can concisely express in a pure functional language some programs that manipulate state, handle exceptions, parse text, or invoke continuations. A new solution to the old problem of destructive array update is also presented. No knowledge of category theory is assumed.
Theorems for free!
 FUNCTIONAL PROGRAMMING LANGUAGES AND COMPUTER ARCHITECTURE
, 1989
"... From the type of a polymorphic function we can derive a theorem that it satisfies. Every function of the same type satisfies the same theorem. This provides a free source of useful theorems, courtesy of Reynolds' abstraction theorem for the polymorphic lambda calculus. ..."
Abstract

Cited by 379 (8 self)
 Add to MetaCart
(Show Context)
From the type of a polymorphic function we can derive a theorem that it satisfies. Every function of the same type satisfies the same theorem. This provides a free source of useful theorems, courtesy of Reynolds' abstraction theorem for the polymorphic lambda calculus.
The Integration of Functions into Logic Programming: From Theory to Practice
 Journal of Logic Programming
, 1994
"... Abstract. Functional logic programming languages combine the most important declarative programming paradigms, and attempts to combine these paradigms have a long history. The declarative multiparadigm language Curry is influenced by recent advances in the foundations and implementation of function ..."
Abstract

Cited by 356 (59 self)
 Add to MetaCart
(Show Context)
Abstract. Functional logic programming languages combine the most important declarative programming paradigms, and attempts to combine these paradigms have a long history. The declarative multiparadigm language Curry is influenced by recent advances in the foundations and implementation of functional logic languages. The development of Curry is an international initiative intended to provide a common platform for the research, teaching, and application of integrated functional logic languages. This paper surveys the foundations of functional logic programming that are relevant for Curry, the main features of Curry, and extensions and applications of Curry and functional logic programming. 1
Programming with bananas, lenses, envelopes and barbed wire
 In FPCA
, 1991
"... We develop a calculus for lazy functional programming based on recursion operators associated with data type definitions. For these operators we derive various algebraic laws that are useful in deriving and manipulating programs. We shall show that all example Functions in Bird and Wadler's &qu ..."
Abstract

Cited by 329 (11 self)
 Add to MetaCart
(Show Context)
We develop a calculus for lazy functional programming based on recursion operators associated with data type definitions. For these operators we derive various algebraic laws that are useful in deriving and manipulating programs. We shall show that all example Functions in Bird and Wadler's "Introduction to Functional Programming " can be expressed using these operators. 1
Computational Interpretations of Linear Logic
 Theoretical Computer Science
, 1993
"... We study Girard's Linear Logic from the point of view of giving a concrete computational interpretation of the logic, based on the CurryHoward isomorphism. In the case of Intuitionistic Linear Logic, this leads to a refinement of the lambda calculus, giving finer control over order of evaluati ..."
Abstract

Cited by 318 (3 self)
 Add to MetaCart
We study Girard's Linear Logic from the point of view of giving a concrete computational interpretation of the logic, based on the CurryHoward isomorphism. In the case of Intuitionistic Linear Logic, this leads to a refinement of the lambda calculus, giving finer control over order of evaluation and storage allocation, while maintaining the logical content of programs as proofs, and computation as cutelimination.
An introduction to the theory of lists
 Logic of Programming and Calculi of Discrete Design. NATO ASI Series F
"... ..."
(Show Context)
A Short Cut to Deforestation
, 1993
"... Lists are often used as "glue" to connect separate parts of a program together. We propose an automatic technique for improving the efficiency of such programs, by removing many of these intermediate lists, based on a single, simple, local transformation. We have implemented the method in ..."
Abstract

Cited by 229 (17 self)
 Add to MetaCart
Lists are often used as "glue" to connect separate parts of a program together. We propose an automatic technique for improving the efficiency of such programs, by removing many of these intermediate lists, based on a single, simple, local transformation. We have implemented the method in the Glasgow Haskell compiler.
Implementing lazy functional languages on stock hardware: the Spineless Tagless Gmachine  Version 2.5
 JOURNAL OF FUNCTIONAL PROGRAMMING
, 1992
"... The Spineless Tagless Gmachine is an abstract machine designed to support nonstrict higherorder functional languages. This presentation of the machine falls into three parts. Firstly, we give a general discussion of the design issues involved in implementing nonstrict functional languages. Next, ..."
Abstract

Cited by 221 (21 self)
 Add to MetaCart
The Spineless Tagless Gmachine is an abstract machine designed to support nonstrict higherorder functional languages. This presentation of the machine falls into three parts. Firstly, we give a general discussion of the design issues involved in implementing nonstrict functional languages. Next, we present the STG language, an austere but recognisablyfunctional language, which as well as a denotational meaning has a welldefined operational semantics. The STG language is the "abstract machine code" for the Spineless Tagless Gmachine. Lastly, we discuss the mapping of the STG language onto stock hardware. The success of an abstract machine model depends largely on how efficient this mapping can be made, though this topic is often relegated to a short section. Instead, we give a detailed discussion of the design issues and the choices we have made. Our principal target is the C language, treating the C compiler as a portable assembler. Version 2.5 of this paper (minus appendix) appe...
Typed Memory Management in a Calculus of Capabilities
, 2000
"... Regionbased memory management is an alternative to standard tracing garbage collection that makes potentially dangerous operations such as memory deallocation explicit but verifiably safe. In this article, we present a new compiler intermediate language, called the Capability Calculus, that supp ..."
Abstract

Cited by 208 (21 self)
 Add to MetaCart
(Show Context)
Regionbased memory management is an alternative to standard tracing garbage collection that makes potentially dangerous operations such as memory deallocation explicit but verifiably safe. In this article, we present a new compiler intermediate language, called the Capability Calculus, that supports regionbased memory management and enjoys a provably safe type system. Unlike previous regionbased type systems, region lifetimes need not be lexically scoped and yet the language may be checked for safety without complex analyses. Therefore, our type system may be deployed in settings such as extensible operating systems where both the performance and safety of untrusted code is important.
Generalising Monads to Arrows
 Science of Computer Programming
, 1998
"... this paper. Pleasingly, the arrow interface turned out to be applicable to other kinds of nonmonadic library also, for example the fudgets library for graphical user interfaces [CH93], and a new library for programming active web pages. These applications will be described in sections 6 and 9. Whil ..."
Abstract

Cited by 205 (3 self)
 Add to MetaCart
this paper. Pleasingly, the arrow interface turned out to be applicable to other kinds of nonmonadic library also, for example the fudgets library for graphical user interfaces [CH93], and a new library for programming active web pages. These applications will be described in sections 6 and 9. While arrows are a little less convenient to use than monads, they have significantly wider applicability. They can therefore be used to bring the benefits of monadlike programming to a much wider class of applications. 2 Background: Library Design Using Monads