Abstract:
We present a new model, based on monads, for performing input/output in a non-strict, purely functional language. It is composable, extensible, efficient, requires no extensions to the type system, and extends smoothly to incorporate mixed-language working and in-place array updates. 1 Introduction Input/output has always appeared to be one of the less satisfactory features of purely functional languages: fitting action into the functional paradigm feels like fitting a square block into a round hole. Closely related difficulties are associated with performing in-place update operations on arrays, and calling arbitrary procedures written in some other (possibly side-effecting) language. Some mostly-functional languages, such as Lisp or SML, deal successfully with input/output by using side effects. We focus on purely-functional solutions, which rule out side effects, for two reasons. Firstly, the absence of side effects permits unrestricted use of equational reasoning and program trans...
Citations
|
3915
|
Design Patterns: Elements of Reusable Object-Oriented Software
– Gamma, Helm, et al.
- 1995
|
|
1420
|
The definition of Standard ML
– Milner, Tofte, et al.
- 1990
|
|
528
|
Categories for the working mathematician
– Lane
|
|
389
|
Comprehending Monads
– Wadler
- 1990
|
|
347
|
Computational lambda-calculus and monads
– Moggi
- 1989
|
|
339
|
ML for the Working Programmer
– Paulson
- 1991
|
|
330
|
Introduction to higher order categorical logic
– Lambek, Scott
- 1986
|
|
294
|
Pizza into Java: Translating theory into practice
– Odersky, Wadler
- 1997
|
|
225
|
Call-by-name, call-by-value, and the -calculus
– Plotkin
- 1975
|
|
224
|
Definitional interpreters for higher-order programming languages
– Reynolds
- 1972
|
|
131
|
The essence of Algol
– Reynolds
- 1981
|
|
119
|
Abstract Interpretation of Declarative Languages
– Abramsky, Hankin
- 1987
|
|
101
|
closure-passing style
– Appel, Jim, et al.
- 1989
|
|
101
|
Algebraic reconstruction of types and effects
– JOUVELOT, GIFFORD
- 1991
|
|
93
|
Preliminary Design of the Programming Language Forsythe
– Reynolds
- 1988
|
|
87
|
An overview of miranda
– Turner
- 1986
|
|
82
|
Typing first-class continuations in ML
– Duba, Harper, et al.
- 1991
|
|
77
|
How to replace failure by a list of successes
– Wadler
- 1985
|
|
68
|
Single-threaded polymorphic lambda calculus
– Guzm'an, Hudak
- 1990
|
|
63
|
Abstracting control
– Danvy, Filinski
- 1990
|
|
63
|
editors). Report on the Programming Language Haskell, A Non-strict Purely Functional Language (Version 1.2
– Hudak, Jones, et al.
- 1992
|
|
55
|
Integrating functional and imperative programming
– Gifford, Lucassen
- 1986
|
|
54
|
Detecting global variables in denotational specifications
– Schmidt
- 1985
|
|
51
|
Using category theory to design implicit conversions and generic operators
– Reynolds
- 1980
|
|
45
|
The essence of functional programming (Invited talk
– Wadler
- 1992
|
|
38
|
A functional theory of exceptions
– Spivey
- 1990
|
|
34
|
the ultimate imperative
– Sussman, Lambda
- 1976
|
|
32
|
Assignments for applicative languages
– Swarup, Reddy, et al.
- 1991
|
|
29
|
Update analysis and the efficient implementation of functional aggregates
– Bloss
- 1989
|
|
27
|
and Yannis Smaragdakis. Functional programming in C
– McNamara
- 2000
|
|
24
|
A framework for higher-order functions in C
– Läufer
- 1995
|
|
22
|
The coherence of languages with intersection types
– Reynolds
- 1991
|
|
21
|
A semantic model of reference counting and its abstraction (detailed summary
– Hudak
- 1986
|
|
16
|
Continuation-based mutable abstract data types, or how to have your state and munge it too
– Hudak
- 1992
|
|
11
|
Syntactic control of interference, part II
– Reynolds
- 1989
|
|
8
|
FACT! – the functional side of C++. http://www.fz-juelich.de/zam/FACT
– Striegnitz
- 2003
|
|
7
|
a continuation extension for
– Perry, HopeC
- 1987
|
|
3
|
An abstract view of programming languges. Course notes
– Moggi
|
|
1
|
Bridging Functional and Object-Oriented Programming” Georgia Tech CoC
– Smaragdakis, McNamara
|
|
1
|
A type checker. Chapter 9 of Simon Peyton Jones, The Implementation of Functional Programming Languages
– Hancock
- 1987
|
|
1
|
there a use for linear logic
– Is
- 1991
|