language extensions ( Re: @-bindings broken in 6.0?)

Christian Maeder maeder@tzi.de
Thu, 26 Jun 2003 13:27:28 +0200


> I think lumping all these extensions under one switch is the
> problem.
> 
> Yep, I agree. Would it be hard to split `-fglasgow-exts'
> up? I'd greatly appreciate a more fine-grained control
> here. 
> 
> 
> The only difficulty is that we don't have an easy way to parameterise
> the parser, since it's generated from a fixed grammar.  It might be

I think, the parser should not be parameterized!

Ideally, a language extension should provide a meaning to programs that 
are rejected without that extension.

A program that can be compiled without extensions must go through (with 
the same meaning) with any or all extensions switched on.

This wasn't the case for "[t|" that could start a list comprehension or 
a template haskell bit.

Therefore the syntax for template haskell should change, since it is 
less convincing to forbid "[t|" as comprehension.

Usually combining reserved keywords or keyops is a good way to extend 
the syntax without loss. So "[: ... :]" (parallel arrays) "[| ... |]" 
(th expression quotations) are ok. And maybe "[{ ... }]", "[@ ... @]", 
"[~ ... ~]", "[= ... =]",  (and similar things with curly braces) are 
further alternatives.

New keyords (like "foreign") should be forbidden for the Standard (post 
mortem)! ("forall" and "exists" should be illegal as type variables in 
Haskell98.) I don't know what the new arrows add  Is it "mdo", 
"mreturn"? Why not "\do", "\return" (or "let do", "let return" or 
"|do|", "|return|")?

Otherwise ghc simply supports a disjoint set of languages.

Christian

P.S. I agree however to have several switches (to be analysed after parsing)

-ffunctional-dependencies
-fhigher-rank-polymorphism