| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
| |
Older GHCs can't parse OPTIONS_GHC.
This also changes the URL referenced for the -w options from
WorkingConventions#Warnings to CodingStyle#Warnings for the compiler
modules.
|
| |
|
|
|
|
| |
- Fixed test "Infix" in the testsuite, which Roman added
|
| |
|
| |
|
|
|
|
|
| |
You now say
deriving instance Cxt => Head
|
|
|
|
|
|
|
|
| |
Defaulting makes compilation of multiple modules more complicated (re: #1405)
Although it was all locally within functions, not because of the module
monomorphism-restriction... but it's better to be clear what's meant, anyway.
I changed some that were defaulting to Integer, to explicit Int, where Int
seemed appropriate rather than Integer.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
"qualified reservedids"
I didn't actually fix this to respect Haskell 98, instead I changed it
to follow the proposal for Haskell':
http://hackage.haskell.org/cgi-bin/haskell-prime/trac.cgi/wiki/QualifiedIdentifiers
Rationale:
- We didn't respect Haskell 98 with respect to qualified symbols either
- The Haskell' change makes things much cleaner
- Obeying the Haskell 98 spec literally has some unintended
consequences (e.g. M.where must lex as "M.wher" "e")
- Any programs that compiled before this change and do not compile
after it were illegal according to Haskell 98 anyway.
|
|
|
|
|
|
|
| |
It looks like this was an experiment that accidentally got committed,
somewhere between 6.0 and 6.2.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
-XUnboxedTuples
-XExpressionSignaturesUnboxedTuples
-XTypeSynonymUnboxedTuples
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
f () = do { x :: Bool <- return True; ... }
For some reason the production for 'pat' required 'infixexp' on the
LHS of a do-notation binding. This patch makes it an 'exp', which
thereby allows an expression with a type sig.
Happily, there are no new shift-reduce errors, so I don't think this
will break anything else.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1. Record disambiguation (-fdisambiguate-record-fields)
In record construction and pattern matching (although not
in record updates) it is clear which field name is intended
even if there are several in scope. This extension uses
the constructor to disambiguate. Thus
C { x=3 }
uses the 'x' field from constructor C (assuming there is one)
even if there are many x's in scope.
2. Record punning (-frecord-puns)
In a record construction or pattern match or update you can
omit the "=" part, thus
C { x, y }
This is just syntactic sugar for
C { x=x, y=y }
3. Dot-dot notation for records (-frecord-dot-dot)
In record construction or pattern match (but not update)
you can use ".." to mean "all the remaining fields". So
C { x=v, .. }
means to fill in the remaining fields to give
C { x=v, y=y }
(assuming C has fields x and y). This might reasonably
considered very dodgy stuff. For pattern-matching it brings
into scope a bunch of things that are not explictly mentioned;
and in record construction it just picks whatver 'y' is in
scope for the 'y' field. Still, Lennart Augustsson really
wants it, and it's a feature that is extremely easy to explain.
Implementation
~~~~~~~~~~~~~~
I thought of using the "parent" field in the GlobalRdrEnv, but
that's really used for import/export and just isn't right for this.
For example, for import/export a field is a subordinate of the *type
constructor* whereas here we need to know what fields belong to a
particular *data* constructor.
The main thing is that we need to map a data constructor to its
fields, and we need to do so in the renamer. For imported modules
it's easy: just look in the imported TypeEnv. For the module being
compiled, we make a new field tcg_field_env in the TcGblEnv.
The important functions are
RnEnv.lookupRecordBndr
RnEnv.lookupConstructorFields
There is still a significant infelicity in the way the renamer
works on patterns, which I'll tackle next.
I also did quite a bit of refactoring in the representation of
record fields (mainly in HsPat).***END OF DESCRIPTION***
Place the long patch description above the ***END OF DESCRIPTION*** marker.
The first line of this file will be the patch name.
This patch contains the following changes:
M ./compiler/deSugar/Check.lhs -3 +5
M ./compiler/deSugar/Coverage.lhs -6 +7
M ./compiler/deSugar/DsExpr.lhs -6 +13
M ./compiler/deSugar/DsMeta.hs -8 +8
M ./compiler/deSugar/DsUtils.lhs -1 +1
M ./compiler/deSugar/MatchCon.lhs -2 +2
M ./compiler/hsSyn/Convert.lhs -3 +3
M ./compiler/hsSyn/HsDecls.lhs -9 +25
M ./compiler/hsSyn/HsExpr.lhs -13 +3
M ./compiler/hsSyn/HsPat.lhs -25 +63
M ./compiler/hsSyn/HsUtils.lhs -3 +3
M ./compiler/main/DynFlags.hs +6
M ./compiler/parser/Parser.y.pp -13 +17
M ./compiler/parser/RdrHsSyn.lhs -16 +18
M ./compiler/rename/RnBinds.lhs -2 +2
M ./compiler/rename/RnEnv.lhs -22 +82
M ./compiler/rename/RnExpr.lhs -34 +12
M ./compiler/rename/RnHsSyn.lhs -3 +2
M ./compiler/rename/RnSource.lhs -50 +78
M ./compiler/rename/RnTypes.lhs -50 +84
M ./compiler/typecheck/TcExpr.lhs -18 +18
M ./compiler/typecheck/TcHsSyn.lhs -20 +21
M ./compiler/typecheck/TcPat.lhs -8 +6
M ./compiler/typecheck/TcRnMonad.lhs -6 +15
M ./compiler/typecheck/TcRnTypes.lhs -2 +11
M ./compiler/typecheck/TcTyClsDecls.lhs -3 +4
M ./docs/users_guide/flags.xml +7
M ./docs/users_guide/glasgow_exts.xml +42
|
|
|
|
|
|
| |
I reorganized the lexing of numeric literals a bit so the code didn't
get too ugly, after trying a few ways, and also considering possible plans
to be able to conditionally lex negative _boxed_ literals.
|
| |
|
|
|
|
|
|
|
|
| |
I decided against adding parseSignedInteger since octal
and hex literals often have junk between the '-' and the
digits, but, compare to Util.readRational which does handle
signed numbers. Also since Integers - mathematically and
in Haskell - can be negative, normally.
|
|
|
|
|
|
| |
. This change tracks our current terminology. It'll break all programs
using the old option, sorry. But this has only been an experimental
feature in the HEAD so far.
|
| |
|
|
|
|
|
|
|
|
|
| |
- This patch removes "newtype family" declarations.
- "newtype instance" declarations can now be instances of data families
- This also fixes bug #1331
** This patch changes the interface format. All libraries and all of **
** Stage 2 & 3 need to be re-compiled from scratch. **
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
| |
This fixes Trac #1204. There's quite a delicate interaction of
GADTs, type families, records, and in particular record updates.
Test is indexed-types/should_compile/Records.hs
|
|
|
|
|
| |
It looks like this was accidentally replaced with '?' in the patch
"HsSyn clean up for indexed types". (see bug #1294)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
WARNING: this patch changes interface-file formats slightly
you will need to recompile your libraries
Duncan Coutts wanted to export a function that has a NOINLNE pragma
in a local let-defintion. This works fine within a module, but was
not surviving across the interface-file serialisation.
http://www.haskell.org/pipermail/glasgow-haskell-users/2007-March/012171.html
Regardless of whether or not he's doing something sensible, it seems
reasonable to try to retain local-binder IdInfo across interface files.
This initial patch just retains inline-pragma info, on the grounds that
other IdInfo can be re-inferred at the inline site.
Interface files get a tiny bit bigger, but it seesm slight.
|
|
|
|
| |
See #1277
|
|
|
|
|
|
|
|
|
| |
This patch updates the External Core creator, pretty-printer, and parser to
agree on a concrete syntax for External Core, including the constructs
required by the change to System FC. Code to create valid ASTs from External
Core files will come later, as will bits for renaming, typechecking, and
desugaring.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes Trac #1065. The fix is just to emit a decent error message
rather than crash. The situation is this:
f x = ... [d| $(..stuff..);
f x = v :: T |] ...
TH wants to rename and typecheck the bracket; but it can't run the
nested splice yet. That seems hard, because we know nothing about v, T,
which are, presumably bound by the splice.
The original TH paper says this isn't allowed, and now it's checked for
properly (in the parser, in fact) rather than causing a crash. In the
fullness of time we might want to do something more flexible, but not now.
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
The class is named IsString with the single method fromString.
Overloaded strings work the same way as overloaded numeric literals.
In expressions a string literals gets a fromString applied to it.
In a pattern there will be an equality comparison with the fromString:ed literal.
Use -foverloaded-strings to enable this extension.
|