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 =
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
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
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 -
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.
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
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