5 years agoExpose source locations via Implicit Parameters of type GHC.Location.Location
Eric Seidel [Mon, 19 Jan 2015 22:08:32 +0000 (16:08 -0600)] 
Expose source locations via Implicit Parameters of type GHC.Location.Location

IPs with this type will always be solved for the current source
location. If another IP of the same type is in scope, the two locations will be
appended, creating a call-stack. The Location type is kept abstract so users
cannot create them, but a Location can be turned into a list of SrcLocs, which
correspond to individual locations in a program. Each SrcLoc contains a
package/module/file name and start/end lines and columns.

The only thing missing from the SrcLoc in my opinion is the name of the
top-level definition it inhabits. I suspect that would also be useful, but it's
not clear to me how to extract the current top-level binder from within the
constraint solver. (Surely I'm just missing something here?)

I made the (perhaps controversial) decision to have GHC completely ignore
the names of Location IPs, meaning that in the following code:

    bar :: (?myloc :: Location) => String
    bar = foo

    foo :: (?loc :: Location) => String
    foo = show ?loc

if I call `bar`, the resulting call-stack will include locations for

1. the use of `?loc` inside `foo`,
2. `foo`s call-site inside `bar`, and
3. `bar`s call-site, wherever that may be.

This makes Location IPs very special indeed, and I'm happy to change it if the
dissonance is too great.

I've also left out any changes to base to make use of Location IPs, since there
were some concerns about a snowball effect. I think it would be reasonable to
mark this as an experimental feature for now (it is!), and defer using it in
base until we have more experience with it. It is, after all, quite easy to
define your own version of `error`, `undefined`, etc. that use Location IPs.

Test Plan: validate, new test-case is testsuite/tests/typecheck/should_run/IPLocation.hs

Reviewers: austin, hvr, simonpj

Reviewed By: simonpj

Subscribers: simonmar, rodlogic, carter, thomie

Differential Revision:

GHC Trac Issues: #9049

5 years agoUpgrade Cabal submodule to latest HEAD, change to package key calculation.
Edward Z. Yang [Sat, 10 Jan 2015 00:53:22 +0000 (16:53 -0800)] 
Upgrade Cabal submodule to latest HEAD, change to package key calculation.

One notable change is that the package key calculation algorithm in Cabal
has changed (from an undocumented format based on Show instances to a fully
specified format), so you will need to do a full rebuild.

I'd greatly prefer if this could be merged to 7.10.

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: austin


GHC Trac Issues:

5 years agoRespect package visibility when deciding wired in packages.
Edward Z. Yang [Mon, 19 Jan 2015 18:23:46 +0000 (10:23 -0800)] 
Respect package visibility when deciding wired in packages.

Previously, we would consider ALL versions of a wired-in package,
no matter if they were exposed or not, and pick the latest version.
This patch is a minor refinement on the behavior: now we try to
pick the wired in package from just the list of exposed packages,
and if there are no candidates fall back on the full list.  This
means that if you do:

    -hide-all-packages -package wired-in-OLD-VERSION

it will actually work by default (whereas previously you needed
to *explicitly* -ignore-package the newer version).  This is especially
useful for the 'ghc' package.  Fixes #9955.

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: simonpj, austin

Reviewed By: austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9955

5 years agoTidy up fix to Trac #9999
Simon Peyton Jones [Mon, 19 Jan 2015 16:45:31 +0000 (16:45 +0000)] 
Tidy up fix to Trac #9999

Minor refactoring only

5 years agoDoc fix (follow up to #9957)
Austin Seipp [Mon, 19 Jan 2015 14:23:51 +0000 (08:23 -0600)] 
Doc fix (follow up to #9957)

Signed-off-by: Austin Seipp <>
5 years agoAPI Annotations documentation update, parsing issue, add example test
Alan Zimmerman [Mon, 19 Jan 2015 14:15:18 +0000 (08:15 -0600)] 
API Annotations documentation update, parsing issue, add example test

Add a reference note to each AnnKeywordId haddock comment so GHC
developers will have an idea why they are there.

Add a new test to ghc-api/annotations to serve as a template for other
GHC developers when they need to update the parser. It provides output
which checks that each SrcSpan that an annotation is attached to
actually appears in the `ParsedSource`, and lists the individual
annotations. The idea is that a developer writes a version of this
which parses a sample file using whatever syntax is changed in
Parser.y, and can then check that all the annotations come through.

Depends on D538

Test Plan: ./validate

Reviewers: simonpj, hvr, austin

Reviewed By: austin

Subscribers: thomie, jstolarek

Differential Revision:

5 years agoAdd missing test from previous commit (55199a97)
Austin Seipp [Mon, 19 Jan 2015 14:10:58 +0000 (08:10 -0600)] 
Add missing test from previous commit (55199a97)

Signed-off-by: Austin Seipp <>
5 years agoUpdate directory submodule to latest 1.2.2 snapshot
Herbert Valerio Riedel [Mon, 19 Jan 2015 13:39:57 +0000 (14:39 +0100)] 
Update directory submodule to latest 1.2.2 snapshot

5 years agoSplit stripTicks into expression editing and tick collection
Peter Wortmann [Mon, 19 Jan 2015 13:57:19 +0000 (07:57 -0600)] 
Split stripTicks into expression editing and tick collection

As with stripTicksTop, this is because we often need the stripped
expression but not the ticks (at least not right away). This makes a big
difference for CSE, see #9961.

Signed-off-by: Austin Seipp <>
5 years agoMake AutoDeriveTypeable work for associated datatypes (fix #9999)
Jose Pedro Magalhaes [Mon, 19 Jan 2015 13:36:03 +0000 (13:36 +0000)] 
Make AutoDeriveTypeable work for associated datatypes (fix #9999)

5 years agoRevert "Add export lists to some modules."
Austin Seipp [Mon, 19 Jan 2015 12:55:57 +0000 (06:55 -0600)] 
Revert "Add export lists to some modules."

This reverts commit d6e7f5dc9db7e382ce34d649f85505176a451a04.

This commit broke the build on Windows due to CPP weirdness (#9945).

5 years agoRevert "Fix undefined GHC.Real export with integer-simple"
Austin Seipp [Mon, 19 Jan 2015 12:54:54 +0000 (06:54 -0600)] 
Revert "Fix undefined GHC.Real export with integer-simple"

This reverts commit 228902aa4a3350a9c99e421c0c989c7de794b7b6.

This commit is dependent on d6e7f5dc9db7e382ce34d649f85505176a451a04,
which broke the build on Windows (issue #9945).

5 years agoTest Trac #9867
Simon Peyton Jones [Mon, 19 Jan 2015 11:59:28 +0000 (11:59 +0000)] 
Test Trac #9867

5 years agoImprove documentation of pattern synonyms, to reflect conclusion of Trac #9953
Simon Peyton Jones [Mon, 19 Jan 2015 11:58:54 +0000 (11:58 +0000)] 
Improve documentation of pattern synonyms, to reflect conclusion of Trac #9953

5 years agoFix bad '... \\' escape in ghcversion.h generation
Herbert Valerio Riedel [Mon, 19 Jan 2015 11:18:02 +0000 (12:18 +0100)] 
Fix bad '... \\' escape in ghcversion.h generation

Today I learned about the peculiarities of escaping within

Turns out,

  echo 'foo \\'


  foo \\

rather than escaping the '\'. Curiously, if you need to escape a '
within single-quotes, here's how to do it

  echo 'foo '\'' bar'

which will emit

  foo ' bar

This fixes #10002

5 years agoUpdate bytestring submodule
Herbert Valerio Riedel [Mon, 19 Jan 2015 11:08:58 +0000 (12:08 +0100)] 
Update bytestring submodule

This pulls in

- (which is related to #9992)

5 years agoAdd missing argument in Match, a merge bug (apologies)
Simon Peyton Jones [Mon, 19 Jan 2015 10:20:39 +0000 (10:20 +0000)] 
Add missing argument in Match, a merge bug (apologies)

5 years agoFix the 'builder' code for pattern synonyms with type signatures
Simon Peyton Jones [Mon, 19 Jan 2015 09:06:21 +0000 (09:06 +0000)] 
Fix the 'builder' code for pattern synonyms with type signatures

See Note [Type signatures and the builder expression] for the details

5 years agoTrac #9384: fix increasing capabilites number for eventlog.
Alexander Vershilov [Sun, 18 Jan 2015 10:58:57 +0000 (10:58 +0000)] 
Trac #9384: fix increasing capabilites number for eventlog.

Event log had inconcistent support for increacing capabilies
number, as header were not inserted in capability buffer. It
resulted in a ghc-events crash (see #9384). This commit
fixes this issue by inserting required header when number
of capabilies grows.

Reviewers: simonmar, Mikolaj, trofi, austin

Reviewed By: Mikolaj, trofi, austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9384

5 years agoAPI Annotations tweaks.
Alan Zimmerman [Thu, 15 Jan 2015 19:11:21 +0000 (13:11 -0600)] 
API Annotations tweaks.

HsTyLit now has SourceText

Update documentation of HsSyn to reflect which annotations are attached to which element.

Ensure that the parser always keeps HsSCC and HsTickPragma values, to
be ignored in the desugar phase if not needed

Bringing in SourceText for pragmas

Add Location in NPlusKPat

Add Location in FunDep

Make RecCon payload Located

Explicitly add AnnVal to RdrName where it is compound

Add Location in IPBind

Add Location to name in IEThingAbs

Add Maybe (Located id,Bool) to Match to track fun_id,infix
  This includes converting Match into a record and adding a note about why
  the fun_id needs to be replicated in the Match.

Add Location in KindedTyVar

Sort out semi-colons for parsing

  - import statements
  - stmts
  - decls
  - decls_cls
  - decls_inst

This updates the haddock submodule.

Test Plan: ./validate

Reviewers: hvr, austin, goldfire, simonpj

Reviewed By: simonpj

Subscribers: thomie, carter

Differential Revision:

5 years agoTrac #9878: Make the static form illegal in interpreted mode.
Alexander Vershilov [Wed, 14 Jan 2015 23:58:30 +0000 (17:58 -0600)] 
Trac #9878: Make the static form illegal in interpreted mode.

The entries of the static pointers table are expected to exist as
object code. Thus we have ghci complain with an intelligible error
message if the static form is used in interpreted mode.

It also includes a fix to keysHashTable in Hash.c which could cause a
crash. The iteration of the hashtable internals was incorrect. This
patch has the function keysHashTable imitate the iteration in

Finally, we submit here some minor edits to comments and
GHC.StaticPtr.StaticPtrInfo field names.

Authored-by: Alexander Vershilov <alexander.vershilov@tweag.
Authored-by: Facundo Domínguez <>
Test Plan: ./validate

Reviewers: simonpj, hvr, austin

Reviewed By: austin

Subscribers: carter, thomie, qnikst, mboes

Differential Revision:

GHC Trac Issues: #9878

5 years agoDon't hardcode the name "ghc" in versionedAppDir
Edsko de Vries [Wed, 14 Jan 2015 23:58:13 +0000 (17:58 -0600)] 
Don't hardcode the name "ghc" in versionedAppDir

Reviewers: austin

Reviewed By: austin

Subscribers: thomie

Differential Revision:

5 years agoFix a terrible bug in the canonicaliser which led to an infinite loop
Simon Peyton Jones [Fri, 16 Jan 2015 14:18:34 +0000 (14:18 +0000)] 
Fix a terrible bug in the canonicaliser which led to an infinite loop

This fixes Trac #9971

Merge into the 7.10 branch

5 years agoRepsect the package name when checking for self-import
Simon Peyton Jones [Fri, 16 Jan 2015 14:17:14 +0000 (14:17 +0000)] 
Repsect the package name when checking for self-import

Fixes Trac #9997.

In doing this I tripped across the specialness of "this" in
PackageImports.  The magic constant (fsLit "this") is scattered across
the compiler and ought to be put in one place.  But where?

5 years agoAdd Eq, Ord, Show, and Read instances for Const
Fumiaki Kinoshita [Wed, 14 Jan 2015 11:41:30 +0000 (20:41 +0900)] 
Add Eq, Ord, Show, and Read instances for Const

As suggested in

this adds the following instances

 - `Show a => Show (Const a b)`
 - `Read a => Read (Const a b)`
 - `Eq a   => Eq   (Const a b)`
 - `Ord a  => Ord  (Const a b)`

The Read/Show instances are defined in such a way as if `Const` was defined
without record-syntax (i.e. as `newtype Const a b = Const a`)

Addresses #9984

Reviewed By: ekmett

Differential Revision:

5 years agoTest Trac #5821
Simon Peyton Jones [Wed, 14 Jan 2015 17:12:29 +0000 (17:12 +0000)] 
Test Trac #5821

And rename the wrongly named rebindable/T5821 to T5908 (Trac #5908)

5 years agoRefactor handling of SPECIALISE pragmas (Trac #5821)
Simon Peyton Jones [Wed, 14 Jan 2015 10:58:22 +0000 (10:58 +0000)] 
Refactor handling of SPECIALISE pragmas (Trac #5821)

The provoking cause was Trac #5821, which concerned
type families, but in fixing it I did the usual round
of tidying up and docmenting.

The main comment is now
    Note [Handling SPECIALISE pragmas]
in TcBinds.

It is "wrinkle 2" that fixes #5821.

5 years agoTiny refactoring (shorter, simpler code)
Simon Peyton Jones [Wed, 14 Jan 2015 10:55:17 +0000 (10:55 +0000)] 
Tiny refactoring (shorter, simpler code)

5 years agoTighten up constraint solve order for RULES
Simon Peyton Jones [Wed, 14 Jan 2015 10:53:49 +0000 (10:53 +0000)] 
Tighten up constraint solve order for RULES

The main point is described in Note [Solve order for RULES].
I'm not sure if the potential bug described there could actually
happen, but I bet it could.  Anyway, this patch explicitly solves
LHS constraints and *then* RHS constraints (see the Note).

I also moved simplifyRule from TcSimplify (a large module) to
TcRules (a small one), which brings related code together.
It did mean I had to export runTcS from TcSimplify, but I think
that's a price worth paying.

5 years agoCorrect typos in comments to mkDataCon
Simon Peyton Jones [Mon, 12 Jan 2015 11:19:10 +0000 (11:19 +0000)] 
Correct typos in comments to mkDataCon

5 years agoOptimise scavenge_large_srt_bitmap
Simon Marlow [Tue, 13 Jan 2015 20:33:20 +0000 (20:33 +0000)] 
Optimise scavenge_large_srt_bitmap

Very large modules can sometimes contain very large SRT bitmaps (this
is a separate problem that I need to look into).  The large bitmaps
often contain a lot of zeros, so this patch skips over empty words in
the bitmap.

It makes a dramatic difference in the particular example that I saw,
where an old gen GC was taking 0.5s before this change and 0.07s after

5 years agoCompile the RTS with -g by default
Simon Marlow [Tue, 13 Jan 2015 20:23:35 +0000 (20:23 +0000)] 
Compile the RTS with -g by default

Having debugging info doesn't hurt performance, can be stripped from
binaries, and it's useful for debugging and profiling.

5 years agoAllow the linker to run concurrently with the GC
Simon Marlow [Fri, 19 Dec 2014 20:10:40 +0000 (20:10 +0000)] 
Allow the linker to run concurrently with the GC

5 years agoImprove documentation for -N and -qa (#9890)
Simon Marlow [Tue, 16 Dec 2014 11:42:42 +0000 (11:42 +0000)] 
Improve documentation for -N and -qa (#9890)

5 years agoDwarf generation fixed pt 2
Peter Wortmann [Thu, 8 Jan 2015 21:19:56 +0000 (22:19 +0100)] 
Dwarf generation fixed pt 2

- Don't bracket HsTick expression uneccessarily
- Generate debug information in UTF8
- Reduce amount of information generated - we do not currently need
  block information, for example.

Special thanks to slyfox for the reports!

5 years agoFix panics of PartialTypeSignatures combined with extensions
Thomas Winant [Mon, 12 Jan 2015 11:29:50 +0000 (05:29 -0600)] 
Fix panics of PartialTypeSignatures combined with extensions

Disallow wildcards in stand-alone deriving instances
(StandaloneDeriving), default signatures (DefaultSignatures) and
instances signatures (InstanceSigs).

Test Plan: validate

Reviewers: austin

Reviewed By: austin

Subscribers: carter, thomie, monoidal

Differential Revision:

GHC Trac Issues: #9922

5 years agoTrac #9878: Have StaticPointers support dynamic loading.
Alexander Vershilov [Mon, 12 Jan 2015 11:29:18 +0000 (05:29 -0600)] 
Trac #9878: Have StaticPointers support dynamic loading.

A mutex is used to protect the SPT.

unsafeLookupStaticPtr and staticPtrKeys in GHC.StaticPtr are made

SPT entries are removed in a destructor function of modules.

Authored-by: Facundo Domínguez <>
Authored-by: Alexander Vershilov <>
Test Plan: ./validate

Reviewers: austin, simonpj, hvr

Subscribers: carter, thomie, qnikst, mboes

Differential Revision:

GHC Trac Issues: #9878

5 years agoPackage environments
Edsko de Vries [Mon, 12 Jan 2015 11:22:22 +0000 (05:22 -0600)] 
Package environments

Summary: Package environments are files with package IDs that indicate which packages should be visible; see entry in user guide for details.

Reviewers: duncan, austin

Reviewed By: duncan, austin

Subscribers: carter, thomie

Differential Revision:

5 years agoadd -th-file which generates a th.hs file
Greg Weber [Mon, 12 Jan 2015 11:16:37 +0000 (05:16 -0600)] 
add -th-file which generates a th.hs file

see Trac #8624

similar functionality is now available
with -ddump-to-file -ddump-splices

However, users are already accustomed to -ddump-splices
having a particular format, and this format is not completely valid code
The goal of -th-file is to dump valid Haskell code

Additionally, the convention of -ddump-to-file is to name the file after
the flag, so the file is .dump-splices
Given that the goal of the new flag is to generate valid Haskell,
The extension should be .hs

Additionally, -ddump-to-file effects all other dump flags

Test Plan:
look at the output of using the -th-file flag
and compare it to the output of using -ddump-to-file and -ddump-splices
I want to add test cases, but just need some pointers on getting started there

Reviewers: thomie, goldfire, simonpj, austin

Reviewed By: simonpj, austin

Subscribers: thomie, carter

Differential Revision:

GHC Trac Issues: #8624

5 years agoaclocal.m4: fix == bashism in FIND_LLVM_PROG
Tuncer Ayaz [Mon, 12 Jan 2015 11:14:45 +0000 (05:14 -0600)] 
aclocal.m4: fix == bashism in FIND_LLVM_PROG

Reviewers: austin, erikd

Reviewed By: erikd

Subscribers: erikd, carter, thomie

Projects: #ghc

Differential Revision:

5 years agoEvent Manager: Make one-shot a per-registration property
Ben Gamari [Mon, 12 Jan 2015 23:36:23 +0000 (18:36 -0500)] 
Event Manager: Make one-shot a per-registration property

Currently the event manager has a global flag for whether to create
epoll-like notifications as one-shot (e.g. EPOLLONESHOT, where an fd
will be deactivated after its first event) or standard multi-shot

Unfortunately this means that the event manager may export either
one-shot or multi-shot semantics to the user. Even worse, the user has
no way of knowing which semantics are being delivered. This resulted in
breakage in the usb[1] library which deadlocks after notifications on
its fd are disabled after the first event is delivered.  This patch
reworks one-shot event support to allow the user to choose whether
one-shot or multi-shot semantics are desired on a per-registration
basis. The event manager can then decide whether to use a one-shot or
multi-shot epoll.

A registration is now defined by a set of Events (as before) as well as
a Lifetime (either one-shot or multi-shot). We lend monoidal structure
to Lifetime choosing OneShot as the identity. This allows us to combine
Lifetime/Event pairs of an fd to give the longest desired lifetime of
the registration and the full set of Events for which we want


Test Plan: Add more test cases and validate

Reviewers: tibbe, AndreasVoellmy, hvr, austin

Reviewed By: austin

Subscribers: thomie, carter, simonmar

Differential Revision:

5 years agoUpdate Cabal submodule to latest snapshot
Herbert Valerio Riedel [Mon, 12 Jan 2015 21:37:19 +0000 (22:37 +0100)] 
Update Cabal submodule to latest snapshot

Differential Revision:

5 years agoMove libffi configuration after basic toolchain setup
Reid Barton [Mon, 12 Jan 2015 15:59:11 +0000 (10:59 -0500)] 
Move libffi configuration after basic toolchain setup

The relevant aspect is that the libffi configuration's AC_CHECK_LIB
and AC_CHECK_HEADERS are moved after FIND_GCC. There are two reasons
to do this:

1. We should detect the presence of libffi using the C compiler
that we are eventually going to use to build GHC.

2. Running AC_CHECK_HEADERS before FIND_GCC pollutes the CPP variable
with "gcc -E" (wrong when cross-compiling), and CPP is not reset
by FIND_GCC. Thus this patch fixes x86_64 -> i386 cross-compilation
of integer-gmp2.

Test Plan: Local x86_64 -> i386 cross-compiling validate; Harbormaster

Reviewers: austin

Reviewed By: austin

Subscribers: erikd, carter, thomie

Differential Revision:

5 years agoinplace: Don't add empty component to LD_LIBRARY_PATH when it is empty
Reid Barton [Mon, 12 Jan 2015 15:56:58 +0000 (10:56 -0500)] 
inplace: Don't add empty component to LD_LIBRARY_PATH when it is empty

Summary: Avoids a confusing inconsistency when testing #9386 (about ghci finding .so files in .).

Test Plan: validate

Reviewers: austin

Reviewed By: austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9386

5 years agoMore comments on HsBang
Simon Peyton Jones [Sun, 11 Jan 2015 23:07:24 +0000 (23:07 +0000)] 
More comments on HsBang

In particular about the dcSrcBangs field of an imported DataCon

5 years agoUpdate pretty submodule to release
Herbert Valerio Riedel [Fri, 9 Jan 2015 22:53:19 +0000 (23:53 +0100)] 
Update pretty submodule to release

5 years agoNewtype CoreMap and TypeMap so their keys are user-friendly.
Edward Z. Yang [Thu, 8 Jan 2015 23:57:57 +0000 (15:57 -0800)] 
Newtype CoreMap and TypeMap so their keys are user-friendly.

Summary: Signed-off-by: Edward Z. Yang <>

Test Plan: validate

Reviewers: simonpj, austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9960

5 years agoInline all of the .*[TCE] methods, and then rename .*[TCE]X to vacated name.
Edward Z. Yang [Thu, 8 Jan 2015 22:09:23 +0000 (14:09 -0800)] 
Inline all of the .*[TCE] methods, and then rename .*[TCE]X to vacated name.

Signed-off-by: Edward Z. Yang <>
5 years agoMiscellaneous improvements to TrieMap, from D608 code review.
Edward Z. Yang [Thu, 8 Jan 2015 21:33:23 +0000 (13:33 -0800)] 
Miscellaneous improvements to TrieMap, from D608 code review.

    - Add SPECIALIZE pragmas for the lkG/xtG/mapG/fdG family of functions

    - Rename wrapEmptyXX to just emptyXX

    - New deBruijnize function for initializing DeBruijn elements

    - Some extra documentation

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: simonpj, austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9960

5 years agoFix Trac #9973 (buglet in -fwarn-redundant-constraints)
Simon Peyton Jones [Fri, 9 Jan 2015 16:45:03 +0000 (16:45 +0000)] 
Fix Trac #9973 (buglet in -fwarn-redundant-constraints)

5 years agoPattern synonym names need to be in scope before renaming bindings (#9889)
Dr. ERDI Gergo [Wed, 17 Dec 2014 14:09:06 +0000 (22:09 +0800)] 
Pattern synonym names need to be in scope before renaming bindings (#9889)

I did a bit of refactoring at the same time, needless to say

5 years agoFix up test for T7861
Simon Peyton Jones [Fri, 9 Jan 2015 13:00:16 +0000 (13:00 +0000)] 
Fix up test for T7861

Fixes Trac #9972

5 years agoA little tidying up in the flattener
Simon Peyton Jones [Fri, 9 Jan 2015 11:51:52 +0000 (11:51 +0000)] 
A little tidying up in the flattener

Particularly, flatten_many was exported, but the caller was not doing
runFlatten.  Moreover it was always used at nominal role.

This patch makes the API clearer, and more robust

5 years agoComments only
Simon Peyton Jones [Fri, 9 Jan 2015 10:53:26 +0000 (10:53 +0000)] 
Comments only

5 years agoPattern synonyms do work in GHCi now (see #9900)
Dr. ERDI Gergo [Fri, 9 Jan 2015 11:30:04 +0000 (19:30 +0800)] 
Pattern synonyms do work in GHCi now (see #9900)

5 years agoUpdate syntax of pattern synonym type signature in documentation (fixes #9967)
Dr. ERDI Gergo [Fri, 9 Jan 2015 11:29:28 +0000 (19:29 +0800)] 
Update syntax of pattern synonym type signature in documentation (fixes #9967)

5 years agoA little tidying up in ErrUtils
Simon Peyton Jones [Fri, 9 Jan 2015 10:07:02 +0000 (10:07 +0000)] 
A little tidying up in ErrUtils

This module is a disorganised mess.

For example, there is literally *no* documentation of what the *seven*
different forms of 'Severity' are intended to connote.

Anyway this patch makes a tiny step by not exporting unused functions
pprMsgBag and isWarning, and a little bit of internal refactoring

5 years agoMake TcRnMonad.reportWarning call makeIntoWarning
Simon Peyton Jones [Fri, 9 Jan 2015 09:47:57 +0000 (09:47 +0000)] 
Make TcRnMonad.reportWarning call makeIntoWarning

Previously the caller had do to that, and sometimes forgot

5 years agoReturn a [HsImplBang] from dataConImplBangs even with NoDataConRep
Simon Peyton Jones [Fri, 9 Jan 2015 09:46:37 +0000 (09:46 +0000)] 
Return a [HsImplBang] from dataConImplBangs even with NoDataConRep

This fixes Trac #9969, a new crash in T7562 that I somehow missed when
fiddling with HsBang

5 years agoApply GenMap to CoreMap and CoercionMap.
Edward Z. Yang [Thu, 8 Jan 2015 03:13:28 +0000 (19:13 -0800)] 
Apply GenMap to CoreMap and CoercionMap.

The biggest chore is the Eq (DeBrujin a) instances (all the more a chore
because we already have an implementation of them, but a CmEnv is not an
RnEnv2), but otherwise a fairly mechanical transformation.

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: simonpj, austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9960

5 years agoAdd 'DeBruijn' constructor, which generalizes "key modulo alpha-renaming."
Edward Z. Yang [Thu, 8 Jan 2015 01:50:42 +0000 (17:50 -0800)] 
Add 'DeBruijn' constructor, which generalizes "key modulo alpha-renaming."

We need equality over Types, etc; and this equality has to be modulo alpha
renaming. Previously, we baked CmEnv into the generic "empty, singleton, many"
structure. This isn't great, really GenMap should be more generic than that.

The insight: we've defined the key wrong: the key should be *equipped*
with the alpha-renaming information (CmEnv) and a TrieMap queried with this.
This is what the DeBruijn constructor does.

Now, when we define TrieMap instances, we don't have to synthesize an emptyCME
to pass to the helper functions: we have all the information we need. To make a
recursive call, we construct a new DeBruijn with the updated CME and then
call lookupTM on that. We can even define a plain old Eq instance on DeBruijn
respecting alpha-renaming.  There are number of other good knock-on effects.

This patch does add a bit of boxing and unboxing, but nothing the optimizer
shouldn't be able to eliminate.

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: simonpj, austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9960

5 years agoRecenter T6048 performance numbers
Joachim Breitner [Thu, 8 Jan 2015 21:30:20 +0000 (22:30 +0100)] 
Recenter T6048 performance numbers

5 years agoBump haddock.base according to whats observed on ghcspeed
Joachim Breitner [Thu, 8 Jan 2015 20:02:56 +0000 (21:02 +0100)] 
Bump haddock.base according to whats observed on ghcspeed

5 years agoImprove HsBang
Simon Peyton Jones [Thu, 8 Jan 2015 15:54:39 +0000 (15:54 +0000)] 
Improve HsBang

Provoked by questions from Johan

 - Improve comments, fix misleading stuff
 - Add commented synonyms for HsSrcBang, HsImplBang, and use them throughout
 - Rename HsUserBang to HsSrcBang
 - Rename dataConStrictMarks to dataConSrcBangs
          dataConRepBangs    to dataConImplBangs

This renaming affects Haddock in a trivial way, hence submodule update

5 years agoSpelling error in comment
Simon Peyton Jones [Thu, 8 Jan 2015 13:16:13 +0000 (13:16 +0000)] 
Spelling error in comment

5 years agoImprove documentation of -fwarn-redundant-constraints
Simon Peyton Jones [Thu, 8 Jan 2015 13:15:50 +0000 (13:15 +0000)] 
Improve documentation of -fwarn-redundant-constraints

5 years agoFix out of date comment.
Edward Z. Yang [Thu, 8 Jan 2015 06:49:36 +0000 (22:49 -0800)] 
Fix out of date comment.

Signed-off-by: Edward Z. Yang <>
5 years agoGeneralize TrieMap compression to GenMap.
Edward Z. Yang [Wed, 7 Jan 2015 21:48:10 +0000 (13:48 -0800)] 
Generalize TrieMap compression to GenMap.

I still haven't applied the optimization to anything besides TypeMap.

Signed-off-by: Edward Z. Yang <>
Depends On: D606

Reviewers: simonpj, austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9960

5 years agoCompress TypeMap TrieMap leaves with singleton constructor.
Edward Z. Yang [Tue, 6 Jan 2015 21:34:18 +0000 (13:34 -0800)] 
Compress TypeMap TrieMap leaves with singleton constructor.

Suppose we have a handful H of entries in a TrieMap, each with a very large
key, size K. If you fold over such a TrieMap you'd expect time O(H). That would
certainly be true of an association list! But with TrieMap we actually have to
navigate down a long singleton structure to get to the elements, so it takes
time O(K*H).  The point of a TrieMap is that you need to navigate to the point
where only one key remains, and then things should be fast.

This is a starting point: we can improve the patch by generalizing the
singleton constructor so it applies to CoercionMap and CoreMap; I'll do this
in a later commit.

Summary: Signed-off-by: Edward Z. Yang <>

Test Plan: validate

Reviewers: simonpj, austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9960

5 years agoMark T9938 as expect_broken again
Simon Peyton Jones [Wed, 7 Jan 2015 13:56:19 +0000 (13:56 +0000)] 
Mark T9938 as expect_broken again

It's failing reliable for me (as I think it should) and Edward.
See Trac #9938.

Reverts commit 633814f5

5 years agoFix stderr for T9939
Simon Peyton Jones [Wed, 7 Jan 2015 13:51:27 +0000 (13:51 +0000)] 
Fix stderr for T9939

5 years agoFix undefined GHC.Real export with integer-simple
Erik de Castro Lopo [Wed, 7 Jan 2015 09:37:54 +0000 (20:37 +1100)] 
Fix undefined GHC.Real export with integer-simple

Test Plan: Check that GHC.Real compiles without OPTIMISE_INTEGER_GCD_LCM nor MIN_VERSION_integer_gmp defined.

Reviewers: carter, ezyang, erikd, hvr, dfeuer, austin

Reviewed By: erikd, hvr, dfeuer, austin

Subscribers: erikd, dfeuer, carter, thomie

Differential Revision:

5 years agoMake comments less beautiful in order to pacify Haddock
Simon Peyton Jones [Tue, 6 Jan 2015 17:26:03 +0000 (17:26 +0000)] 
Make comments less beautiful in order to pacify Haddock

5 years agoAnother fix to genprimopcode, when generating Prim.hs
Simon Peyton Jones [Tue, 6 Jan 2015 17:25:17 +0000 (17:25 +0000)] 
Another fix to genprimopcode, when generating Prim.hs

When haddock processes Prim.hs, it was calling TcEnv.tcGetDefaultTys,
and that made it look for Integer and String, which are not in
ghc-prim.  Result was a crash.

But we don't need defaulting in Prim.hs, so add
   default ()

5 years agoUpdate haddock submodule, and fix haddock input file from genprimopcode
Simon Peyton Jones [Tue, 6 Jan 2015 16:43:52 +0000 (16:43 +0000)] 
Update haddock submodule, and fix haddock input file from genprimopcode

* A module in haddock an unused constraint, now fixed and pushed to ghc-head
  This patch records the new commit in GHC repo

* genprimopcode generates a dummy Prim.hs for haddock.  But then Haddock was
  complaining about redundant constraints.  So this patch makes genprimopcode
  generate a warning-suppression OPTIONS_GHC pragma in Prim.hs

5 years agoTest Trac #9939
Simon Peyton Jones [Tue, 6 Jan 2015 15:28:16 +0000 (15:28 +0000)] 
Test Trac #9939

5 years agoRemove redundant constraints from libraries, discovered by -fwarn-redundant-constraints
Simon Peyton Jones [Tue, 6 Jan 2015 13:46:35 +0000 (13:46 +0000)] 
Remove redundant constraints from libraries, discovered by -fwarn-redundant-constraints

This patch affects libraries, and requires a submodule update.

Some other libraries, maintained by others, have redundant constraints,

I have suppressed the redundant-constraint warnings by settings in
(in this commit)

5 years agoRemove redundant constraints in the compiler itself, found by -fwarn-redundant-constr...
Simon Peyton Jones [Mon, 5 Jan 2015 16:57:01 +0000 (16:57 +0000)] 
Remove redundant constraints in the compiler itself, found by -fwarn-redundant-constraints

5 years agoMajor patch to add -fwarn-redundant-constraints
Simon Peyton Jones [Mon, 5 Jan 2015 13:20:48 +0000 (13:20 +0000)] 
Major patch to add -fwarn-redundant-constraints

The idea was promted by Trac #9939, but it was Christmas, so I did
some recreational programming that went much further.

The idea is to warn when a constraint in a user-supplied context is
redundant.  Everything is described in detail in
  Note [Tracking redundant constraints]
in TcSimplify.

Main changes:

 * The new ic_status field in an implication, of type ImplicStatus.
   It replaces ic_insol, and includes information about redundant

 * New function TcSimplify.setImplicationStatus sets the ic_status.

 * TcSigInfo has sig_report_redundant field to say whenther a
   redundant constraint should be reported; and similarly
   the FunSigCtxt constructor of UserTypeCtxt

 * EvBinds has a field eb_is_given, to record whether it is a given
   or wanted binding. Some consequential chagnes to creating an evidence
   binding (so that we record whether it is given or wanted).

 * AbsBinds field abs_ev_binds is now a *list* of TcEvBiinds;
   see Note [Typechecking plan for instance declarations] in

 * Some significant changes to the type checking of instance
   declarations; Note [Typechecking plan for instance declarations]
   in TcInstDcls.

 * I found that TcErrors.relevantBindings was failing to zonk the
   origin of the constraint it was looking at, and hence failing to
   find some relevant bindings.  Easy to fix, and orthogonal to
   everything else, but hard to disentangle.

Some minor refactorig:

 * TcMType.newSimpleWanteds moves to Inst, renamed as newWanteds

 * TcClassDcl and TcInstDcls now have their own code for typechecking
   a method body, rather than sharing a single function. The shared
   function (ws TcClassDcl.tcInstanceMethodBody) didn't have much code
   and the differences were growing confusing.

 * Add new function TcRnMonad.pushLevelAndCaptureConstraints, and
   use it

 * Add new function Bag.catBagMaybes, and use it in TcSimplify

5 years agoPrint singleton consraints without parens
Simon Peyton Jones [Mon, 5 Jan 2015 12:56:46 +0000 (12:56 +0000)] 
Print singleton consraints without parens

The main change is in TypeRep.pprTheta, so we print
       Eq a
for a singleton, but
      (Eq a, Show a)
for multiple constraints.

There are lots of trivial knock-on changes to error messages

5 years agoUse a less fragile method for defaulting
Simon Peyton Jones [Mon, 5 Jan 2015 10:53:37 +0000 (10:53 +0000)] 
Use a less fragile method for defaulting

When doing top-level defaulting, in TcSimplify.applyDefaultingRules, we
were temporarily making a unification variable equal to the default type
(Integer, say, or Float), as a 'given', and trying to solve. But this
relied on the unification variable being untouchable, which seems
complicated.  It's much simpler just to generate a new set of
constraints to solve, using newWantedEvVarNC in disambigGroup.

(I tripped over an ASSERT failure, and this solved it in a robust way.)

5 years agoAlways generalise a partial type signature
Simon Peyton Jones [Mon, 5 Jan 2015 10:39:46 +0000 (10:39 +0000)] 
Always generalise a partial type signature

This fixes an ASSERT failure in TcBinds.  The problem was that we
were generating NoGen plan for a function with a partial type signature,
and that led to confusion and lost invariants.

See Note [Partial type signatures and generalisation] in TcBinds

5 years agoReplace fixVarSet with transCloVarSet
Simon Peyton Jones [Sat, 3 Jan 2015 23:36:09 +0000 (23:36 +0000)] 
Replace fixVarSet with transCloVarSet

I think the new implementation is a bit more efficient, because
it uses a work-list, rather than iterating over the entire set
every time

5 years agoModify a couple of error messages slightly
Simon Peyton Jones [Sat, 3 Jan 2015 23:27:21 +0000 (23:27 +0000)] 
Modify a couple of error messages slightly

In particular
  In the type signature for:
     f :: Int -> Int
I added the colon

Also reword the "maybe you haven't applied a function to enough arguments?"
suggestion to make grammatical sense.

These tiny changes affect a lot of error messages.

5 years agoUpdaete perf numbers for 32-bit machines
Simon Peyton Jones [Tue, 6 Jan 2015 12:29:03 +0000 (12:29 +0000)] 
Updaete perf numbers for 32-bit machines

5 years agoMake the location in TcLclEnv and CtLoc into a RealSrcSpan
Simon Peyton Jones [Tue, 6 Jan 2015 12:28:37 +0000 (12:28 +0000)] 
Make the location in TcLclEnv and CtLoc into a RealSrcSpan

Previously it was a SrcSpan, which can be an UnhelpulSrcSpan,
but actually for TcLclEnv and CtLoc we always know it is
a real source location, and it's good to make the types
reflect that fact.

There is a continuing slight awkwardness (not new with this
patch) about what "file name" to use for GHCi code.  Current
we say "<interactive>" which seems just about OK.

5 years agosubmodule update: remove html dependency from nofib.
Edward Z. Yang [Mon, 5 Jan 2015 21:20:46 +0000 (13:20 -0800)] 
submodule update: remove html dependency from nofib.

Signed-off-by: Edward Z. Yang <>
5 years agoUpdate Cabal submodule to latest 1.22 snapshot
Herbert Valerio Riedel [Sat, 3 Jan 2015 22:17:14 +0000 (23:17 +0100)] 
Update Cabal submodule to latest 1.22 snapshot

5 years agoFix #9243 so recompilation avoidance works with -fno-code
Edward Z. Yang [Sat, 27 Dec 2014 18:50:01 +0000 (10:50 -0800)] 
Fix #9243 so recompilation avoidance works with -fno-code

Where we track timestamps of object files, also track timestamps
for interface files.  When -fno-code -fwrite-interface is enabled, use
the interface file timestamp as an extra check to see if the files are
up-to-date.  We had to apply this logic to one-shot and make modes.

This fix would be good to merge into 7.10; it makes using -fno-code
-fwrite-interface for flywheel type checking usable.

Signed-off-by: Edward Z. Yang <>
Test Plan: validate and new test cases

Reviewers: austin

Subscribers: carter, thomie

Differential Revision:

GHC Trac Issues: #9243

5 years agoDon't do a half-hearted recompilation check in compileOne
Edward Z. Yang [Sat, 27 Dec 2014 05:56:54 +0000 (21:56 -0800)] 
Don't do a half-hearted recompilation check in compileOne

The isNothing maybe_old_linkable check predates
48bc81ad466edfc80237015dbe5d78ba70eb5095, which fixed #481 by requiring
recompilation information to be passed in as an argument to compileOne.
As a result, the check here is redundant: the client has already taken
a look at the object file to see if it is available or not.

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: simonmar, austin

Subscribers: carter, thomie

Differential Revision:

5 years agoMark T9938 as not broken
Joachim Breitner [Sat, 3 Jan 2015 13:39:52 +0000 (14:39 +0100)] 
Mark T9938 as not broken

either one of the two recent commits (d8d0031, fd97d2a) fixed it, or
there is some nondeterminism here. See #9938.

5 years agoWhen solving one Given from another, use the depth to control which way round
Simon Peyton Jones [Wed, 31 Dec 2014 10:21:43 +0000 (10:21 +0000)] 
When solving one Given from another, use the depth to control which way round

See Note [Replacement vs keeping].

There's a bit further to go with this change (to report unused givens).
But it's already an improvement; see the latent bug described in the Note.

5 years agoEliminate the final two calls to xCtEvidence
Simon Peyton Jones [Wed, 31 Dec 2014 10:02:24 +0000 (10:02 +0000)] 
Eliminate the final two calls to xCtEvidence

I always found calls to TcCanonical.xCtEvidence hard to grok; and I
found that we only had two left. This patch eliminates them, along
with xCtEvidence, its accompanying comments, and the auxiliary
XEvTerm type.

The two remaining calls were these:

 * One was in newSCWorkFromFlavored, where we'd already done
   case-splitting for given/wanted/derived.  So inlining the xCtEvidence
   made the code simpler, clearer, and faster.

 * The other was in canTuple; here all of xCtEvidence's functionality
   was needed, but inlining again made a net gain in code size and

5 years agoComments only, mainly on superclasses
Simon Peyton Jones [Tue, 30 Dec 2014 16:36:36 +0000 (16:36 +0000)] 
Comments only, mainly on superclasses

This tidies up all the comments about recursive superclasses
and when to add superclasses.  Lots of duplicate and contradictory
comments removed!

5 years agoComments only (mainly about HsWithBndrs)
Simon Peyton Jones [Tue, 30 Dec 2014 13:55:45 +0000 (13:55 +0000)] 
Comments only (mainly about HsWithBndrs)

5 years agoImprove documentation of -XFlexibleInstances
Simon Peyton Jones [Tue, 30 Dec 2014 10:58:15 +0000 (10:58 +0000)] 
Improve documentation of -XFlexibleInstances

I ended up introducing a new sub-section on instance termination.

5 years agoUpdate nofib submodule, unbreak cryptarithm2
Joachim Breitner [Tue, 30 Dec 2014 11:49:40 +0000 (12:49 +0100)] 
Update nofib submodule, unbreak cryptarithm2

5 years agoRefine test case for #9938
Joachim Breitner [Tue, 30 Dec 2014 10:38:25 +0000 (11:38 +0100)] 
Refine test case for #9938

By passing -O2, the bug appears depending on the order of clauses in
"solve", hence adding T9938B as the other variant.

Currently, T9938 is marked as broken, but maybe the bug is actually in
T9938B, where something (possibly inlining, as suggested by rwbarton)
affected the requirement to link against transformers.

5 years agoTest case for #9938
Joachim Breitner [Mon, 29 Dec 2014 18:37:19 +0000 (19:37 +0100)] 
Test case for #9938

Marked as known_broken

5 years agoSkip T2276_ghci on Darwin, since stdcall is not supported.
Edward Z. Yang [Mon, 29 Dec 2014 16:36:21 +0000 (11:36 -0500)] 
Skip T2276_ghci on Darwin, since stdcall is not supported.

Summary: Signed-off-by: Edward Z. Yang <>

Test Plan: validate

Reviewers: austin, erikd

Reviewed By: erikd

Subscribers: erikd, carter, thomie

Differential Revision: