Abstract. The powerful abstraction mechanisms of functional programming languages provide the means to develop domain-specific programming languages within the language itself. Typically, this is realised by designing a set of combinators (higher-order reusable programs) for an application area, and by constructing individual applications by combining and coordinating individual combinators. This paper is concerned with a successful example of such an embedded programming language, namely Fudgets, a library of combinators for building graphical user interfaces in the lazy functional language Haskell. The Fudget library has been used to build a number of substantial applications, including a web browser and a proof editor interface to a proof checker for constructive type theory. This paper develops a semantic theory for the non-deterministic stream processors that are at the heart of the Fudget concept. The interaction of two features of stream processors makes the development of such a semantic theory problematic: (i) the sharing of computation provided by the lazy evaluation mechanism of the underlying host language, and (ii) the addition of non-deterministic choice needed to handle the natural concurrency that reactive applications entail. We demonstrate that this combination of features in a higher-order functional language can be tamed to provide a tractable semantic theory and induction principles suitable for reasoning about contextual equivalence of Fudgets.
|
216
|
CML: A Higher-order Concurrent Language
– Reppy
- 1991
|
|
168
|
A foundation for actor computation
– Agha, Smith, et al.
- 1997
|
|
168
|
A powerdomain construction
– Plotkin
- 1976
|
|
155
|
The call-by-need lambda calculus
– Ariola, Felleisen, et al.
- 1995
|
|
148
|
A natural semantics for lazy evaluation
– Launchbury
- 1993
|
|
89
|
Equivalence in functional languages with effects
– Mason, Talcott
- 1991
|
|
72
|
A transformation-based optimiser for Haskell
– Jones, Santos
- 1998
|
|
67
|
Power domains
– Smyth
- 1978
|
|
60
|
An overview of Manifold and its implementation. Concurrency: Practice and Experience
– Arbab, Herman, et al.
- 1993
|
|
55
|
Powerdomains and predicate transformers: a topological view
– Smyth
- 1983
|
|
48
|
Deriving a Lazy Abstract Machine
– Sestoft
- 1997
|
|
47
|
Let-floating: moving bindings to give faster programs
– Jones, Partain, et al.
- 1996
|
|
38
|
A na"ive time analysis and its theory of cost equivalence
– Sands
- 1995
|
|
35
|
Non-determinism in functional languages
– Sndergaard, Sestoft
- 1992
|
|
31
|
The Chemical Abstract Machine, Theoretical Computer Science 96
– Berry, Boudol
- 1992
|
|
30
|
Composing Haggis
– Finne, Jones
- 1995
|
|
28
|
Improvement in a lazy context: an operational theory for call-by-need
– Moran, Sands
- 1999
|
|
25
|
Fudgets - Purely Functional Processes with applications to Graphical User Interfaces
– Carlsson, Hallgren
- 1998
|
|
24
|
A theory for nondeterminism, parallelism, communication and concurrency
– Broy
- 1986
|
|
23
|
Nondeterministic Call by Need is Neither Lazy Nor by Name
– Clinger
- 1982
|
|
20
|
Relational Reasoning about Functions and Nondeterminism
– Lassen
- 1998
|
|
15
|
Some notes on inductive and co-inductive techniques in the semantics of functional programs
– Pitts
- 1994
|
|
15
|
A call by need lambda calculus
– Ariola, Felleisen, et al.
- 1995
|
|
12
|
Computing with contexts: A simple approach
– Sands
- 1998
|
|
11
|
Call-by-name, call-by-need, and McCarthy's Amb
– Moran
- 1998
|
|
10
|
Mccarthy's AMB cannot implement fair merge
– Panangaden, Shanbhogue
- 1988
|
|
10
|
Improvement theory and its applications
– Sands
- 1998
|
|
8
|
Equivalence in functional languages with eects
– Mason, Talcott
- 1991
|
|
6
|
A non-deterministic call-by-need lambda calculus
– Kutzner, Schmidt-Schauß
- 1998
|
|
4
|
Reppy, eXene
– Gansner, H
- 1991
|
|
3
|
Fully abstract models of the typed -calculus, Theoretical Computer Science 4
– Milner
- 1977
|
|
2
|
Towards a semantic theory of CML (extended abstract
– Ferreira, Hennessy
- 1995
|
|
2
|
A theory of weak bisimulation for core
– Ferreira, Hennessy, et al.
- 1996
|
|
2
|
Formalising and Reasoning about Fudgets
– Taylor
- 1998
|
|
1
|
An operational theory for McCarthy's Amb
– Lassen, Moran
- 1998
|
|
1
|
From CML to its process algebra, Theoretical Computer Science 155
– Nielson, Nielson
- 1996
|
|
1
|
The Haskell Report, Version 1.4
– Peterson, Hammond
- 1997
|
|
1
|
Non-determinism in functional languages, The Computer Journal 35
– Sndergaard, Sestoft
- 1992
|
|
1
|
The call-by-need lambda calculus, Journal of Functional Programming 7
– Ariola, Felleisen
- 1997
|
|
1
|
A theory for Core Fudgets
– Taylor
- 1998
|
|
1
|
Unique point induction for McCarthy's Amb
– Lassen, Moran
- 1999
|