| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch adds quasi-quotation, as described in
"Nice to be Quoted: Quasiquoting for Haskell"
(Geoffrey Mainland, Haskell Workshop 2007)
Implemented by Geoffrey and polished by Simon.
Overview
~~~~~~~~
The syntax for quasiquotation is very similar to the existing
Template haskell syntax:
[$q| stuff |]
where 'q' is the "quoter". This syntax differs from the paper, by using
a '$' rather than ':', to avoid clashing with parallel array comprehensions.
The "quoter" is a value of type Language.Haskell.TH.Quote.QuasiQuoter, which
contains two functions for quoting expressions and patterns, respectively.
quote = Language.Haskell.TH.Quote.QuasiQuoter quoteExp quotePat
quoteExp :: String -> Language.Haskell.TH.ExpQ
quotePat :: String -> Language.Haskell.TH.PatQ
TEXT is passed unmodified to the quoter. The context of the
quasiquotation statement determines which of the two quoters is
called: if the quasiquotation occurs in an expression context,
quoteExp is called, and if it occurs in a pattern context, quotePat
is called.
The result of running the quoter on its arguments is spliced into
the program using Template Haskell's existing mechanisms for
splicing in code. Note that although Template Haskell does not
support pattern brackets, with this patch binding occurrences of
variables in patterns are supported. Quoters must also obey the same
stage restrictions as Template Haskell; in particular, in this
example quote may not be defined in the module where it is used as a
quasiquoter, but must be imported from another module.
Points to notice
~~~~~~~~~~~~~~~~
* The whole thing is enabled with the flag -XQuasiQuotes
* There is an accompanying patch to the template-haskell library. This
involves one interface change:
currentModule :: Q String
is replaced by
location :: Q Loc
where Loc is a data type defined in TH.Syntax thus:
data Loc
= Loc { loc_filename :: String
, loc_package :: String
, loc_module :: String
, loc_start :: CharPos
, loc_end :: CharPos }
type CharPos = (Int, Int) -- Line and character position
So you get a lot more info from 'location' than from 'currentModule'.
The location you get is the location of the splice.
This works in Template Haskell too of course, and lets a TH program
generate much better error messages.
* There's also a new module in the template-haskell package called
Language.Haskell.TH.Quote, which contains support code for the
quasi-quoting feature.
* Quasi-quote splices are run *in the renamer* because they can build
*patterns* and hence the renamer needs to see the output of running the
splice. This involved a bit of rejigging in the renamer, especially
concerning the reporting of duplicate or shadowed names.
(In fact I found and removed a few calls to checkDupNames in RnSource
that are redundant, becuase top-level duplicate decls are handled in
RnNames.)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch implements generalised list comprehensions, as described in
the paper "Comprehensive comprehensions" (Peyton Jones & Wadler, Haskell
Workshop 2007). If you don't use the new comprehensions, nothing
should change.
The syntax is not exactly as in the paper; see the user manual entry
for details.
You need an accompanying patch to the base library for this stuff
to work.
The patch is the work of Max Bolingbroke [batterseapower@hotmail.com],
with some advice from Simon PJ.
The related GHC Wiki page is
http://hackage.haskell.org/trac/ghc/wiki/SQLLikeComprehensions
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch renames the DOC_OPTIONS pragma to OPTIONS_HADDOCK. It also
adds "-- # ..."-style Haddock option pragmas, for compatibility with
code that use them.
Another change is that both of these two pragmas behave like
OPTIONS_GHC, i.e. they are only allowed at the top of the module, they
are ignored everywhere else and they are stored in the dynflags. There is
no longer any Haddock options in HsSyn.
Please merge this to the 6.8.2 branch when 6.8.1 is out, if appropriate.
|
|
|
|
| |
MERGE TO STABLE
|
| |
|
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
-XUnboxedTuples
-XExpressionSignaturesUnboxedTuples
-XTypeSynonymUnboxedTuples
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
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.
|
| |
|
| |
|
| |
|
|
|
|
|
| |
It looks like this was accidentally replaced with '?' in the patch
"HsSyn clean up for indexed types". (see bug #1294)
|
| |
|
|
|
|
|
|
|
|
|
| |
Since lambda is a lower-case letter, it's debatable whether we want to
steal it to mean lambda in Haskell source. However if we did, then we
would probably want to make it a "special" symbol, not just a reserved
symbol, otherwise writing \x->... (using unicode characters of course)
wouldn't work, because \x would be treated as a single identifier,
you'd need a space.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- This patch cleans up the HsSyn representation of type family declarations.
- The new representation is not only less delicate, it also simplified teh code
a bit.
- I took the opportunity of stream lining the terminology and function names
at the same time.
- I also updated the description on the wiki at
<http://hackage.haskell.org/trac/ghc/wiki/TypeFunctionsSyntax>
|
|
|
|
| |
documentation
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This tidy-up, triggered by Trac #1068, re-factors the way that 'deriving'
happens. It took me way longer than I had intended. The main changes,
by far are to TcDeriv; everyting else is a minor consequence.
While I was at it, I changed the syntax for standalone deriving, so that
it goes
derive instance Show (T a)
(instead of "derive Show for T"). However, there's still an implicit
context, generated by the deriving code, and I wonder if it shouldn't really
be
derive instance (..) => Show (T a)
but I have left it simple for now.
I also added a function Type.substTyVars, and used it here and there, which
led to some one-line changes otherwise unrelated (sorry).
Loose ends:
* 'deriving Typeable' for indexed data types is still not right
* standalone deriving should be documented
|
|
|
|
|
|
|
|
| |
Adding a {-# GENERATED "SourceFile" SourceSpan #-} <expr> pragma.
This will be used to generate coverage for tool generated (or quoted) code.
The pragma states the the expression was generated/quoted from the stated
source file and source span.
|
|
|
|
|
|
| |
Haddock documentation comments weren't being treated as comments even
without the -haddock flag. Fixes nofib/spectral/simple, and probably
others.
|
|
|
|
| |
Push this further along, and fix build problems in the first patch.
|
| |
|
| |
|