Re: Strictness

1993-10-29 Thread wadler
I've separated this from my previous note, because it's about the precise question of strictness annotations rather than the more general question of laws. I would rather tell someone that to define a new type exactly isomorphic to an old type they need to write newtype Type =

Re: Strictness

1993-10-29 Thread wadler
If Lennart was asking, `Shall we make laws a paramount design feature of Haskell, and therefore go for unlifted tuples, unlifted functions, and no n+k or literal patterns', my answer would be `let's go for it'. But I suspect what Lennart is really asking is `Shall we ignore laws, have lifted

Re: Strictness

1993-10-29 Thread hudak-paul
I think it's important to realize that laws aren't being entirely lost -- they're just being weakened a (wee) bit, in the form of carrying an extra constraint. For example, eta conversion: \x - f x = f must simply be modified slightly: \x - f x = fif f /= _|_ (I should

Re: Strictness

1993-10-29 Thread wadler
Paul writes, I think it's important to realize that laws aren't being entirely lost -- they're just being weakened a (wee) bit, in the form of carrying an extra constraint. For example, eta conversion: \x - f x = f must simply be modified slightly: \x -

Re: Strictness

1993-10-29 Thread hudak-paul
Indeed. Notice that there is a similar difference between call-by-need and call-by-value beta: (\x - u) t = u[t/x] call-by-need (\x - u) t = u[t/x] if t /= _|_call-by-value But here we seem to think the difference is important.

Re: ANNOUNCE: Happy version 0.7 (alpha)

1993-10-29 Thread Simon Marlow
For all those having problems compiling Happy with ghc version 0.16, the solution is to compile the module ProduceCode.lhs without optimisation. A small patch to the Makefile can be found on ftp.dcs.gla.ac.uk in the file pub/haskell/happy/happy-0.7-0.7.1.patch. Also, we didn't make it clear

Re: Strictness

1993-10-29 Thread hudak-paul
I would rather tell someone that to define a new type exactly isomorphic to an old type they need to write newtype Type = Constructor typeexp then tell them that they need to write data Type = Constructor !typeexp The latter smacks too much of magic. This is clearly a