Abstract:
Functional programming languages are informally classified into pure and impure languages. The precise meaning of this distinction has been a matter of controversy. We therefore investigate a formal definition of purity. We begin by showing that some proposed definitions that rely on confluence, soundness of the beta axiom, preservation of pure observational equivalences, and independence of the order of evaluation, do not withstand close scrutiny. We propose instead a definition based on parameter-passing independence. Intuitively, the definition implies that functions are pure mappings from arguments to results; the operational decision of how to pass the arguments is irrelevant. In the context of Haskell, our definition is consistent with the fact that the traditional call-by-name denotational semantics coincides with the traditional call-by-need implementation. Furthermore, our definition is compatible with the stream-based, continuationbased, and monad-based integration of computa...
Citations
|
1122
|
Introduction to Functional Programming
– Bird, Wadler
- 1988
|
|
327
|
LCF considered as a programming language
– Plotkin
- 1977
|
|
225
|
Call-by-name, call-by-value, and the -calculus
– Plotkin
- 1975
|
|
224
|
Definitional interpreters for higher-order programming languages
– Reynolds
- 1972
|
|
211
|
Report on the programming language Haskell: A non-strict, purely functional language
– Hudak, Jones, et al.
- 1992
|
|
208
|
The revised report on the syntactic theories of sequential control and state
– Felleisen, Hieb
- 1992
|
|
161
|
The Lambda Calculus: Its Syntax and Semantics, revised edition. Studies in Logic and the Foundations of Mathematics, North Holland
– Barendregt
- 1984
|
|
147
|
Parameter-passing and the lambda calculus
– Crank, Felleisen
- 1991
|
|
90
|
Preliminary design of the programming language Forsythe
– Reynolds
- 1988
|
|
62
|
Combinatory Reduction Systems: Introduction and survey. Theoret. comput. sci
– Klop, Oostrom
- 1993
|
|
42
|
Fully abstract semantics for observably sequential languages
– Cartwright, Curien, et al.
- 1994
|
|
40
|
Controlling Effects
– Filinski
- 1996
|
|
34
|
Observable sequentiality and full abstraction
– Cartwright, Felleisen
- 1992
|
|
32
|
Call by name, assignment, and the lambda calculus
– Odersky, Rabin, et al.
- 1993
|
|
32
|
Assignments for applicative languages
– Swarup, Reddy, et al.
- 1991
|
|
20
|
Monadic state: Axiomatization and type safety
– Launchbury, Sabry
- 1997
|
|
16
|
Report on the programming language Haskell, version 1.4
– Peterson, Hammond
- 1997
|
|
12
|
Reasoning about explicit and implicit representations of state
– Sabry, Field
- 1993
|
|
12
|
Referential transparency, definiteness and unfoldability
– S��ndergaard, Sestoft
- 1990
|
|
7
|
Comprehending monads. Pages 61--78 of
– Wadler
- 1990
|
|
4
|
Note on algol and conservatively extending functional programming
– O'Hearn
- 1995
|
|
4
|
Replacing complexity with generality: the programming language Forsythe
– Reynolds
- 1991
|
|
2
|
Representing monads. Pages 446–457 of
– Filinski
- 1994
|
|
1
|
On the expressive power of programming languages. Pages 35--75 of
– Felleisen
- 1991
|
|
1
|
The essence of Algol. Pages 345--372 of: de Bakker, & van Vliet (eds), Algorithmic languages
– Reynolds
- 1981
|