RE: deeqSeq proposal

2006-04-05 Thread Simon Marlow
On 04 April 2006 19:53, Andy Adams-Moran wrote: Andy Gill wrote: let xs' () = 1 : 2 : xs' () let xs2 = xs' let xs = 1 : 2 : xs So deepSeq xs2 == _|_, but deepSeq xs == xs Yes, and hence deepSeq isn't monotonic. That's bad. I appeal to the morally correct reasoning argument .. If

Re: deeqSeq proposal

2006-04-05 Thread Nils Anders Danielsson
On Tue, 04 Apr 2006, Andy Gill [EMAIL PROTECTED] wrote: let xs' () = 1 : 2 : xs' () let xs2 = xs' let xs = 1 : 2 : xs So deepSeq xs2 == _|_, but deepSeq xs == xs I appeal to the morally correct reasoning argument .. If the program terminates, then it is still correct. To avoid

Re: asynchronous exceptions (was: RE: Concurrency)

2006-04-05 Thread David Roundy
On Tue, Apr 04, 2006 at 01:33:39PM +0100, Simon Marlow wrote: I'm not sure whether asynchronous exceptions should be in Haskell'. I don't feel entirely comfortable about the interruptible operations facet of the design, and I'm hoping that STM can clean things up: after all, STM already gives

Re: important news: refocusing discussion

2006-04-05 Thread Marcin 'Qrczak' Kowalczyk
Simon Marlow [EMAIL PROTECTED] writes: I think it would be a mistake to relegate concurrency to an addendum; it is a central feature of the language, and in fact is one area where Haskell (strictly speaking GHC) is really beginning to demonstrate significant advantages over other languages.

RE: asynchronous exceptions (was: RE: Concurrency)

2006-04-05 Thread Simon Marlow
On 05 April 2006 12:47, David Roundy wrote: On Tue, Apr 04, 2006 at 01:33:39PM +0100, Simon Marlow wrote: The fact that throwTo can interrupt a takeMVar, but can't interrupt a foreign call, even a concurrent one, is a bit strange. We have this odd situation in GHC right now where throwTo can

RE: asynchronous exceptions (was: RE: Concurrency)

2006-04-05 Thread Simon Marlow
On 05 April 2006 13:38, John Meacham wrote: On Wed, Apr 05, 2006 at 07:47:08AM -0400, David Roundy wrote: For me, asynchronous exceptions are the primary reason to use concurrent Haskell. They're the only way I'm aware of to write a program that handles signals in Haskell, and it's be a real

RE: deeqSeq proposal

2006-04-05 Thread Simon Peyton-Jones
| let xs' () = 1 : 2 : xs' () | let xs2 = xs' | | let xs = 1 : 2 : xs | | So deepSeq xs2 == _|_, but deepSeq xs == xs No, no. deepSeq of either should be _|_. That's easy to achieve, even with the marking idea. Simply do a depth-first walk, but mark the node *after* traversing all its

Re: asynchronous exceptions

2006-04-05 Thread Marcin 'Qrczak' Kowalczyk
Simon Marlow [EMAIL PROTECTED] writes: I'm not sure whether asynchronous exceptions should be in Haskell'. I don't feel entirely comfortable about the interruptible operations facet of the design, I designed that differently for my language. There is a distinct synchronous mode where

Re: deeqSeq proposal

2006-04-05 Thread Ben Rudiak-Gould
Andy Gill wrote: - [various reasons for deepSeq] You left out the one that most interests me: ensuring that there are no exceptions hiding inside a data structure. deepSeq :: a - b - b This ties demand for the (fully evaluated) normal form of an expression to demand for the WHNF of a

Re: deeqSeq proposal

2006-04-05 Thread John Meacham
On Wed, Apr 05, 2006 at 10:34:09AM -0500, Spencer Janssen wrote: How about an implementation that sets the deepSeq'd bit *after* each field has been successfully deepSeq'd? deepSeq'ing a cyclic structure would behave just like an infinite structure. what would be the point of having a bit