world as value

Simon Peyton-Jones simonpj@microsoft.com
Thu, 17 Jun 1999 03:24:01 -0700


> Well, I think I more or less agree with you. if I try to simplify
> things I normally come up with two more or less complementary views.
> 
> - if I'm interested in values, I end up with lamda calculus and
>   functional languages.
> - if I'm interested in actions, I end up with process algebra,
>   CSP, and more or less the good old imperative world.
> 
> Well, wat would be really great is to have a proper interface between
> these two paradigms, so than one can use both instead of choosing one.
> 
> And I do NOT mean calling C from a functional language, assuming
> that the C call is 'safe'.

Concurrent Haskell was intended for just this purpose:

	
http://research.microsoft.com/~simonpj/papers/concurrent-haskell.ps.gz

It explicitly adopts a 'layered' semantics:

	- a purely functional layer, given a denotational semantics

	- a concurrent I/O layer, using an operational semantics,
		in the process-calculus style

There are doubtless many ways to address this issue, 
but Concurrent Haskell is at least aimed squarely at
the questions that have been raised in this thread.

There's nothing really Haskell-ish about it.  Clean could
readily implement the CH primitives; indeed they probably
already exist in some form.  The conceptual point is that
CH explicitly abandons the goal of regarding a *program* as
a function.  Instead, the top layer has an explicit, operational
semantics in the process-calculus style.  This 'coordiation layer'
sits on top of a 'computation layer', which is an ordinary standard
denotational semantics, and in which functions really are pure functions.

Simon