On 01/05/2010 13:18, Ian Lynagh wrote:
On Fri, Apr 30, 2010 at 05:05:17PM +0100, Simon Marlow wrote:
I've completed most of the edits to the Haskell 98 report for Haskell
2010, modulo the changes to the libraries that we still have to resolve.
I cleaned up various other things I discovered along the way, and tidied
up the typesetting. I've also made a much nicer HTML rendering of the
report using TeX4ht, which means we can ditch the old 1500 lines of
hacked up Haskell code which used to do the HTML conversion before.
You can see the draft report here, in PDF and online HTML respectively:
http://www.haskell.org/~simonmar/haskell-2010-draft-report.pdf
http://www.haskell.org/~simonmar/haskell-2010-draft-report/haskell.html
In the PDF you'll notice that the bits that changed in Haskell 2010
relative to Haskell 98 are purple (except for the FFI chapter).
Unfortunately I haven't yet managed to make this work in the HTML
version, but it ought to be possible.
I'd appreciate a few more eyes over this, in particular look out for
messed up typesetting as there could still be a few bugs lurking.
In the PDF:
p37: "guard --> pat<- infixexp"
Is that really meant to be infixexp, not exp? GHC accepts:
foo
| True<- True :: Bool
= 'a'
p37: Hmm, likewise "guard --> infixexp". GHC accepts
foo
| True :: Bool
= 'a'
but hugs doesn't (unexpected `::'). So I guess these are both
just GHC bugs, although I wonder why the report isn't more liberal.
See the bottom of 3.13:
"
A note about parsing. The expression
case x of { (a,_) | let b = not a in b :: Bool -> a }
is tricky to parse correctly. It has a single unambiguous parse, namely
case x of { (a,_) | (let b = not a in b :: Bool) -> a }
However, the phrase Bool -> a is syntactically valid as a type, and
parsers with limited lookahead may incorrectly commit to this choice,
and hence reject the program. Programmers are advised, therefore, to
avoid guards that end with a type signature — indeed that is why a guard
contains an infixexp not an exp.
"
In Haskell 98 we had
gd -> | exp^0
where exp^0 is now called infixexp, so I kept things as they were.
Arguably using infixexp here is only a partial fix for the parsing
problem described above, and so it might be better not to try to fix the
problem at all. Either way though, GHC will be wrong.
p42: The negative literal alternative in pat is redundant
well spotted, thanks.
p47: I'm not sure I see the reason for this change. It seems to just
make it more complicated. If the change is made, should say y is a
new variable.
I don't know if the colouring is important, but there's a black "y"
that should be purple, and two purple "_ ->" that should be black,
Agreed, I've reverted that.
p47: Case (h) is alone in ending in a full stop
p48: Case s, again I don't see the point of the y binding
Fixed. Thanks!
Simon
_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-prime