ghc.git
2 years agoFix Mac OS X timestamp resolution bug.
Edward Z. Yang [Mon, 27 Feb 2017 23:15:37 +0000 (15:15 -0800)] 
Fix Mac OS X timestamp resolution bug.

Test Plan: validate

Reviewers: bgamari, austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3229

2 years agoFix windows build broken by D3080 (0d86aa5904e5a06c93632357122e57e4e118fd2a)
Tamar Christina [Tue, 28 Feb 2017 06:21:17 +0000 (06:21 +0000)] 
Fix windows build broken by D3080 (0d86aa5904e5a06c93632357122e57e4e118fd2a)

2 years agoStop uniques ending up in SPEC rule names
Simon Peyton Jones [Mon, 27 Feb 2017 14:09:26 +0000 (09:09 -0500)] 
Stop uniques ending up in SPEC rule names

Reviewers: austin, bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3191

2 years agoExplicitly capture whether a splice has a dollar prefix
Alan Zimmerman [Mon, 27 Feb 2017 09:43:01 +0000 (11:43 +0200)] 
Explicitly capture whether a splice has a dollar prefix

A top-level splice can be written

    $splice

or

    splice

For accurate pretty-printing, and for ghc-exactprint, capture in the hsSyn AST
which variant was parsed.

2 years agoOccurrence-analyse the result of rule firings
Simon Peyton Jones [Mon, 27 Feb 2017 03:17:02 +0000 (22:17 -0500)] 
Occurrence-analyse the result of rule firings

When studying simplCore/should_compile/T7785 I found that a long
chain of maps

  map f (map f (map f (map f (...))))

took an unreasonably long time to simplify.  The problem got
worse when I started inlining in the InitialPhase, which is how
I stumbled on it.

The solution turned  out to be rather simple.  It's described in

   Note [Occurence-analyse after rule firing]

in Simplify.hs

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3190

2 years agoAdd -fspec-constr-keen
Simon Peyton Jones [Mon, 27 Feb 2017 02:53:31 +0000 (21:53 -0500)] 
Add -fspec-constr-keen

I discovered that the dramatic imprvoement in perf/should_run/T9339
with the introduction of join points was really rather a fluke, and
very fragile.

The real problem (see Note [Making SpecConstr keener]) is that
SpecConstr wasn't specialising a function even though it was applied
to a freshly-allocated constructor.  The paper describes plausible
reasons for this, but I think it may well be better to be a bit more
aggressive.

So this patch add -fspec-constr-keen, which makes SpecConstr a bit
keener to specialise, by ignoring whether or not the argument
corresponding to a call pattern is scrutinised in the function body.
Now the gains in T9339 should be robust; and it might even be a
better default.

I'd be interested in what happens if we switched on -fspec-constr-keen
with -O2.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3186

2 years agoRefactor floating of bindings (fiBind)
Simon Peyton Jones [Mon, 27 Feb 2017 02:45:00 +0000 (21:45 -0500)] 
Refactor floating of bindings (fiBind)

This is just a local refactoring.

I originally planned to try floating top-level bindings inwards,
but I backed off from that leaving only this (harmless) refactoring,
which has no behavioural effect.

I also make FloatIn into a ModGuts -> ModGuts function; again not
necessary now, but no harm either.

My attempt also used the new function CoreFVs.freeVarsBind; but
that too is a plausible refactorig of freeVars, so I left it in too.

Reviewers: austin, bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3180

2 years agoSubtyping for roles in signatures.
Edward Z. Yang [Fri, 10 Feb 2017 08:38:34 +0000 (00:38 -0800)] 
Subtyping for roles in signatures.

Summary:
This commit implements the plan in #13140:

* Today, roles in signature files default to representational. Let's change the
  default to nominal, as this is the most flexible implementation side. If a
  client of the signature needs to coerce with a type, the signature can be
  adjusted to have more stringent requirements.

* If a parameter is declared as nominal in a signature, it can be implemented
  by a data type which is actually representational.

* When merging abstract data declarations, we take the smallest role for every
  parameter. The roles are considered fix once we specify the structure of an
  ADT.

* Critically, abstract types are NOT injective, so we aren't allowed to
  make inferences like "if T a ~R T b, then a ~N b" based on the nominal
  role of a parameter in an abstract type (this would be unsound if the
  parameter ended up being phantom.)  This restriction is similar to the
  restriction we have on newtypes.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: simonpj, bgamari, austin, goldfire

Subscribers: goldfire, thomie

Differential Revision: https://phabricator.haskell.org/D3123

2 years agoTreat all TyCon with hole names as skolem abstract.
Edward Z. Yang [Fri, 24 Feb 2017 23:58:09 +0000 (15:58 -0800)] 
Treat all TyCon with hole names as skolem abstract.

Summary:
Fixes #13335.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: goldfire, austin, simonpj, bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3211

2 years agoRemove outdated information about main() in HSrts (#1)
Ben Gamari [Sun, 26 Feb 2017 22:34:09 +0000 (17:34 -0500)] 
Remove outdated information about main() in HSrts (#1)

The main method is not contained in HSrts so the removed section is no longer valid.

2 years agotests: remove extra_files.py (#12223)
Reid Barton [Sat, 25 Feb 2017 02:14:50 +0000 (21:14 -0500)] 
tests: remove extra_files.py (#12223)

The script I used is included as testsuite/driver/kill_extra_files.py,
though at this point it is for mostly historical interest.

Some of the tests in libraries/hpc relied on extra_files.py, so this
commit includes an update to that submodule.

One test in libraries/process also relies on extra_files.py, but we
cannot update that submodule so easily, so for now we special-case it
in the test driver.

2 years agotests: manually move some extra_files into *.T files
Reid Barton [Sat, 25 Feb 2017 01:56:19 +0000 (20:56 -0500)] 
tests: manually move some extra_files into *.T files

Some of the *.T files were in libraries/hpc, so this contains an
update to that submodule.

2 years agoRemove extra_files entries for deleted tests
Reid Barton [Sat, 25 Feb 2017 01:16:46 +0000 (20:16 -0500)] 
Remove extra_files entries for deleted tests

2 years agoManually move extra_files for tests T9579_*
Reid Barton [Sat, 25 Feb 2017 00:58:03 +0000 (19:58 -0500)] 
Manually move extra_files for tests T9579_*

Summary: My script won't understand this.

Test Plan: validate

Reviewers: austin, bgamari, simonmar

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3210

2 years agoBump hpc submodule to allow time-1.8
Reid Barton [Sat, 25 Feb 2017 02:56:51 +0000 (21:56 -0500)] 
Bump hpc submodule to allow time-1.8

2 years agoEnsure that Literals are in range
Joachim Breitner [Sun, 26 Feb 2017 21:27:52 +0000 (16:27 -0500)] 
Ensure that Literals are in range

This commit fixes several bugs related to case expressions
involving numeric literals which are not in the range of values of
their (fixed-width, integral) type.

There is a new invariant on Literal: The argument of a MachInt[64]
or MachWord[64] must lie within the range of the corresponding
primitive type Int[64]# or Word[64]#, as defined by the target machine.
This invariant is enforced in mkMachInt[64]/mkMachWord[64] by wrapping
the argument to the target type's range if necessary.

Test Plan: Test Plan: make slowtest TEST="T9533 T9533b T9533c T10245
T10246"

Trac issues: #9533, #10245, #10246, #13171

Reviewers: simonmar, simonpj, austin, bgamari, nomeata

Reviewed By: bgamari

Subscribers: thomie, rwbarton

Differential Revision: https://phabricator.haskell.org/D810

2 years agoAdd support for concurrent package db access and updates
Andrzej Rybczak [Sun, 26 Feb 2017 21:25:17 +0000 (16:25 -0500)] 
Add support for concurrent package db access and updates

Trac issues: #13194

Reviewers: austin, hvr, erikd, bgamari, dfeuer, duncan

Subscribers: DemiMarie, dfeuer, thomie

Differential Revision: https://phabricator.haskell.org/D3090

2 years agousers-guide: Add documentation for JSON profile format
Ben Gamari [Sun, 26 Feb 2017 21:21:09 +0000 (16:21 -0500)] 
users-guide: Add documentation for JSON profile format

Reviewers: austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3184

2 years agoMove Typeable Binary instances to binary package
Ben Gamari [Thu, 9 Feb 2017 04:00:46 +0000 (23:00 -0500)] 
Move Typeable Binary instances to binary package

Bumps binary submodule.

2 years agoCoercion: Try dropping constraintIsLifted axiom
Ben Gamari [Sun, 26 Feb 2017 20:33:54 +0000 (15:33 -0500)] 
Coercion: Try dropping constraintIsLifted axiom

While working through the FunCo patch I encountered some lint issues
which suggested that `Constraint` wasn't being considered equal to `TYPE
'LiftedRep`.  Consequently I introduced this axiom and associated messy
ball of logic to explicitly coerce `Constraint`.

However, as @goldfire points out on D3208 this really shouldn't be
necessary.  Indeed, I tried ripping out the axiom and things appear to
just work. I suspect the issue motivating the axiom was a bug elsewhere
in the FunCo branch that I fixed during development.

Test Plan: Validate

Reviewers: simonpj, goldfire, austin

Reviewed By: goldfire

Subscribers: thomie, goldfire

Differential Revision: https://phabricator.haskell.org/D3218

2 years agobuild system: Persist CrossCompiling in binary distributions
Ben Gamari [Sun, 26 Feb 2017 20:32:59 +0000 (15:32 -0500)] 
build system: Persist CrossCompiling in binary distributions

The build system uses the CrossCompiling variable to decide whether or
not we should build various packages that must be built using the
compiler.  Consequently, it is important that we persist its value in
the binary distribution so we know during `make install` not to go
looking for files that would have been built for these packages. Failing
to do this causes #13325.

Test Plan: Cross compile, `make binary-dist`, and try installing the
binary distribution on the target

Reviewers: hvr, austin, trofi, rwbarton

Reviewed By: trofi, rwbarton

Subscribers: carter, trofi, rwbarton, erikd, thomie, snowleopard, davean

Differential Revision: https://phabricator.haskell.org/D3187

2 years agoFix SetLevels for makeStaticPtr
Simon Peyton Jones [Sun, 26 Feb 2017 18:51:57 +0000 (13:51 -0500)] 
Fix SetLevels for makeStaticPtr

This too is prepartory for my early-inlining patch.  It turned
out that early inlining exposed a bug in the way that static
pointers were being floated.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3205

2 years agoChange -ddump-tc-trace output in TcErrors, slightly
Simon Peyton Jones [Sun, 26 Feb 2017 18:50:02 +0000 (13:50 -0500)] 
Change -ddump-tc-trace output in TcErrors, slightly

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3200

2 years agoUpdate OverloadedLabels docs and document HasField
Adam Gundry [Sun, 26 Feb 2017 18:46:18 +0000 (13:46 -0500)] 
Update OverloadedLabels docs and document HasField

Test Plan: n/a

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3144

2 years agoBring sanity to openTempFile
Ben Gamari [Sun, 26 Feb 2017 18:44:44 +0000 (13:44 -0500)] 
Bring sanity to openTempFile

Test Plan: Run test of `openTempFile` under `strace` to verify
reasonably random filenames

Reviewers: austin, hvr, trofi, rwbarton

Reviewed By: trofi, rwbarton

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3188

2 years agoAdd testcase for #13340
Ben Gamari [Sun, 26 Feb 2017 18:43:48 +0000 (13:43 -0500)] 
Add testcase for #13340

Test Plan: Validate

Reviewers: rwbarton, austin

Reviewed By: rwbarton

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3215

2 years agotestsuite: Bump down T2762 number
Ben Gamari [Sun, 26 Feb 2017 17:56:03 +0000 (12:56 -0500)] 
testsuite: Bump down T2762 number

Although I'm really not convinced that measuring peak_megabytes_allocated of
this test is reasonable.

2 years agorts: Usage message wibbles
Ben Gamari [Fri, 24 Feb 2017 00:04:40 +0000 (19:04 -0500)] 
rts: Usage message wibbles

2 years agoLoad `pthreads` by default on Windows
Tamar Christina [Thu, 23 Feb 2017 23:34:33 +0000 (18:34 -0500)] 
Load `pthreads` by default on Windows

The GCC Bindists that we use compile with `pthread` enabled by default.
This means that on every link the dll is passed as a dependency by the
driver. Lots of packages depend on it but the runtime linker doesn't
provide it by default making compiled code work but not interpreted.

Following D3028 `pthreads` would be provided by default ONLY when linked
dynamicly, which we don't support yet (See D2592). Until this is the
case we need to manually provide `libpthreads`.

Test Plan: ./validate

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie, #ghc_windows_task_force

Differential Revision: https://phabricator.haskell.org/D3155

2 years agoMake list of deprecated symbols on Windows weak.
Tamar Christina [Thu, 23 Feb 2017 23:33:15 +0000 (18:33 -0500)] 
Make list of deprecated symbols on Windows weak.

We have a unfortunate workaround in place for the fact that most
packages out there use POSIX names for symbols even on Windows.  This
means that we have to recognize e.g. both `_ungetch` and `ungetch`.

The former is the actual symbol name on windows and the latter is the
POSIX variant. The problem is that on normal windows programs `ungetch`
should not be in the global namespace.

To work around this, we now mark the deprecated symbols as weak symbols
in the global namespace. This provides the flexibility we need:

* If you use the symbol without defining it, we assume you meant to use
  the POSIX variant.
* If you actually define the symbol, we'll hence forth use that
  definition and assume you didn't mean to use POSIX code. This is how
  MingW64's wrapper also works.

This requires D3028.

Fixes #13210.

Test Plan: ./validate

Reviewers: austin, bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: thomie, #ghc_windows_task_force

Differential Revision: https://phabricator.haskell.org/D3154

2 years agoLoad dependent dlls.
Tamar Christina [Thu, 23 Feb 2017 23:32:28 +0000 (18:32 -0500)] 
Load dependent dlls.

When the `GCC` driver envokes the pipeline a `SPEC` is used to determine
how to configure the compiler and which libraries to pass along.

For Windows/mingw, this specfile is
https://github.com/gcc-mirror/gcc/blob/master/gcc/config/i386/mingw32.h

This has a lot of interesting things that we need to emulate in order to
be able to link as many things out of the box as GCC. In particular this
is why you never need to specify `-lgcc_s` when compiling, but you do
when using `GHCi`.

Unfortunately due to time constraints I can't set up the framework
required in `GHC` to do this before the feature freeze.

So I suggest this alternate implementation:
When we load a dll, also bring it's dependencies into scope of the
interpeter.

This has pros and cons. Pro is, we'll fix many packages on hackage which
specify just `-lstdc++`. Since this points to `libstdc++-6.dll` which
will bring `libgcc` into scope.

The downside is, we'll be more lenient than GCC, in that the interpreter
will link much easier since it has implicit dependencies in scope.
Whereas for compilation to work you will have to specify it as an
argument to GHC.

This will make the Windows runtime linker more consistent with the unix
ones. The difference in semantics came about because of the differences
between `dlsym` and `GetProcAddress`.  The former seems to search the
given library and all it's dependencies, while the latter only searches
the export table of the library. So we need some extra manual work to
search the dependencies which this patch provides.

Test Plan:
```
./validate
```
```
$ echo :q | inplace/bin/ghc-stage2.exe --interactive +RTS -Dl -RTS
-lstdc++ 2>&1 | grep "Loading dependency"
```

```
$ echo :q | ../inplace/bin/ghc-stage2.exe --interactive -lstdc++ +RTS
-Dl -RTS 2>&1 | grep "Loading dependency"
Loading dependency *.exe -> GDI32.dll.
Loading dependency GDI32.dll -> ntdll.dll.
Loading dependency *.exe -> KERNEL32.dll.
Loading dependency KERNEL32.dll -> KERNELBASE.dll.
Loading dependency *.exe -> msvcrt.dll.
Loading dependency *.exe -> SHELL32.dll.
Loading dependency SHELL32.dll -> USER32.dll.
Loading dependency USER32.dll -> win32u.dll.
Loading dependency *.exe -> WINMM.dll.
Loading dependency WINMM.dll -> WINMMBASE.dll.
Loading dependency *.exe -> WSOCK32.dll.
Loading dependency WSOCK32.dll -> WS2_32.dll.
Loading dependency WS2_32.dll -> RPCRT4.dll.
Loading dependency libstdc++-6.dll -> libwinpthread-1.dll.
Loading dependency libstdc++-6.dll -> libgcc_s_seh-1.dll.
```

Trac tickets: #13093, #13189

Reviewers: simonmar, rwbarton, austin, bgamari, erikd

Reviewed By: bgamari

Subscribers: rwbarton, RyanGlScott, thomie, #ghc_windows_task_force

Differential Revision: https://phabricator.haskell.org/D3028

2 years agoBring in unicode variants of API Annotations for HsBracket
Alan Zimmerman [Sun, 26 Feb 2017 12:18:44 +0000 (14:18 +0200)] 
Bring in unicode variants of API Annotations for HsBracket

2 years agoRename compact to ghc-compact.
Edward Z. Yang [Thu, 23 Feb 2017 21:46:02 +0000 (13:46 -0800)] 
Rename compact to ghc-compact.

Summary:
The plan is to release a separate library, 'compact', which gives a
friendly user-facing interface.  This library is just enough so that we
can make sure the functionality is working in GHC.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: bgamari, dfeuer, austin, simonmar, hvr

Subscribers: thomie, erikd, snowleopard

Differential Revision: https://phabricator.haskell.org/D3206

2 years agoCorrectly pretty print a wild card in infix position
Alan Zimmerman [Sat, 25 Feb 2017 13:42:40 +0000 (15:42 +0200)] 
Correctly pretty print a wild card in infix position

2 years agoDelete redundant import.
Edward Z. Yang [Sat, 25 Feb 2017 02:47:47 +0000 (18:47 -0800)] 
Delete redundant import.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoFix validate.
Edward Z. Yang [Sat, 25 Feb 2017 02:06:58 +0000 (18:06 -0800)] 
Fix validate.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoRecord full FieldLabel in ifConFields.
Edward Z. Yang [Thu, 23 Feb 2017 04:32:41 +0000 (20:32 -0800)] 
Record full FieldLabel in ifConFields.

Summary:
The previous implementation tried to be "efficient" by
storing field names once in IfaceConDecls, and only just
enough information for us to reconstruct the FieldLabel.
But this came at a bit of code complexity cost.

This patch undos the optimization, instead storing a full
FieldLabel at each data constructor.  Consequently, this fixes
bugs #12699 and #13250.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: adamgundry, bgamari, austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3174

2 years agoDocument AMP as a Report deviation
David Feuer [Fri, 24 Feb 2017 18:45:00 +0000 (13:45 -0500)] 
Document AMP as a Report deviation

`Applicative` as a superclass of `Monad` is non-standard.

Fixes #13196.

[skip ci]

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3185

2 years agoAdd a comment explaining CompleteMatchSig in HsBinds
Matthew Pickering [Fri, 24 Feb 2017 17:37:19 +0000 (17:37 +0000)] 
Add a comment explaining CompleteMatchSig in HsBinds

[skip ci]

2 years agoMake SCCFunSig tag Located for ghc-exactprint
Alan Zimmerman [Fri, 24 Feb 2017 16:57:51 +0000 (18:57 +0200)] 
Make SCCFunSig tag Located for ghc-exactprint

2 years agoAdd API Annotation AnnSignature for backpack signature modules
Alan Zimmerman [Fri, 24 Feb 2017 11:00:28 +0000 (13:00 +0200)] 
Add API Annotation AnnSignature for backpack signature modules

2 years agoMake exprIsConApp_maybe work better for literals strings
Simon Peyton Jones [Thu, 23 Feb 2017 14:41:08 +0000 (14:41 +0000)] 
Make exprIsConApp_maybe work better for literals strings

There are two things here

* Use exprIsLiteral_maybe to "look through" a variable bound
  to a literal string.

* Add CONLIKE to the NOINLINE pragma for unpackCString# and
  unpackCStringUtf8#

See Trac #13317, Trac #10844, and
Note [exprIsConApp_maybe on literal strings] in CoreSubst

I did a nofib run and got essentially zero change except for one
2.2% improvement in allocation for 'pretty'.

2 years agoAdd instances for (:~~:) mirroring those for (:~:)
Ryan Scott [Thu, 23 Feb 2017 23:09:58 +0000 (18:09 -0500)] 
Add instances for (:~~:) mirroring those for (:~:)

`(:~~:)`, the hetergeneous version of `(:~:)`, should have class
instances similar to those of `(:~:)`, especially since their
implementations aren't particularly tricky or surprising. This adds
them.

Reviewers: bgamari, austin, hvr, goldfire

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3181

2 years agoCorrect Windows libdir assumptions.
Tamar Christina [Thu, 23 Feb 2017 23:07:19 +0000 (18:07 -0500)] 
Correct Windows libdir assumptions.

GHC and ghc-pkg make some pretty hard assumptions about where they're
running on Windows. They assume that they are always running from
`foo/bin/ghc.exe` and that to find the `lib` folder they can drop
`bin/ghc.exe` from the base path and append `lib`.

This is already false for the testsuite, which when testing thenbindist
 has one test which puts the binaries in `inplace/test   spaces`.

For some reason before this was either being skipped or mysteriously
passing.
But as of `2017.02.11` our luck ran out.

the testsuite triggers a failure such as those in #13310

Let's soften the assumption and just check that `../lib` exists instead.

80 chars

Test Plan: ./validate

Reviewers: austin, erikd, bgamari

Reviewed By: bgamari

Subscribers: thomie, #ghc_windows_task_force

Differential Revision: https://phabricator.haskell.org/D3158

2 years agoFix parsing of And chains in BoolFormula
Dmitry Ivanov [Thu, 23 Feb 2017 23:02:23 +0000 (18:02 -0500)] 
Fix parsing of And chains in BoolFormula

Parse `foo, bar, baz` into `And [foo, bar, baz]`
instead of `And [foo, And [bar, baz]]`.

Fixes #11024.

Test Plan: read and think

Reviewers: austin, bgamari, mpickering

Reviewed By: bgamari, mpickering

Subscribers: ezyang, thomie, alanz

Differential Revision: https://phabricator.haskell.org/D3139

2 years agoInclude OverloadedRecordFields selectors in NameShape.
Edward Z. Yang [Thu, 23 Feb 2017 05:59:59 +0000 (21:59 -0800)] 
Include OverloadedRecordFields selectors in NameShape.

Summary:
Fixes #13323.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: bgamari, austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3175

2 years agoMore tracing in SpecConstr
Simon Peyton Jones [Thu, 23 Feb 2017 18:59:21 +0000 (13:59 -0500)] 
More tracing in SpecConstr

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3179

2 years agoUse half as much memory when reading interfaces
Reid Barton [Thu, 23 Feb 2017 18:54:36 +0000 (13:54 -0500)] 
Use half as much memory when reading interfaces

I don't see any reason for the (filesize*2), and experimentally
allocations do go down slightly after this change.

Test Plan: validate

Reviewers: simonmar, austin, bgamari, trofi

Reviewed By: bgamari, trofi

Subscribers: trofi, thomie

Differential Revision: https://phabricator.haskell.org/D3164

2 years agoghci users guide: mention "~" expansion in :add
Chris Martin [Thu, 23 Feb 2017 18:52:51 +0000 (13:52 -0500)] 
ghci users guide: mention "~" expansion in :add

I discovered this feature via Stack Overflow.
https://stackoverflow.com/questions/42310399

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3150

2 years agobase: Add handling of -- to getArgs for Windows
Andreas Klebinger [Thu, 23 Feb 2017 18:46:15 +0000 (13:46 -0500)] 
base: Add handling of -- to getArgs for Windows

getArgs didn't match the treatmeant of -- in the RTS leading to
inconsistencies between behavior on Windows and other platforms. See #13287.

Reviewers: austin, hvr, bgamari, erikd, simonmar, rwbarton

Reviewed By: bgamari, rwbarton

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3147

2 years agorts: Correct the nursery size in the gen 1 growth computation
John C. Carey [Thu, 23 Feb 2017 18:45:22 +0000 (13:45 -0500)] 
rts: Correct the nursery size in the gen 1 growth computation

Fixes trac issue #13288.

Reviewers: austin, bgamari, erikd, simonmar

Reviewed By: simonmar

Subscribers: mutjida, rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3143

2 years agotestsuite: Remove old python version tests
Reid Barton [Thu, 23 Feb 2017 18:44:17 +0000 (13:44 -0500)] 
testsuite: Remove old python version tests

Test Plan: harbormaster

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3140

2 years agoSet $1_$2_SplitSections in distdir-opts.mk not build-package.mk
Reid Barton [Thu, 23 Feb 2017 18:41:55 +0000 (13:41 -0500)] 
Set $1_$2_SplitSections in distdir-opts.mk not build-package.mk

After commit a50082c11 we use -ffunction-sections -fdata-sections
for all C compilations, when $1_$2_SplitSections is set. But that
variable was set in build-package.mk which is not run for the RTS.
As a result the RTS was not being split, leading to larger binaries.

This commit fixes RTS splitting by moving the definition of
$1_$2_SplitSections to distdir-opts.mk, which is run for the RTS
(and also from build-package.mk).

Test Plan:
manual ./validate and check that RTS and base .c files
are split, but not object files in the compiler

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie, snowleopard, olsner

Differential Revision: https://phabricator.haskell.org/D3137

2 years agoJSON profiler reports
Ben Gamari [Thu, 23 Feb 2017 18:22:48 +0000 (13:22 -0500)] 
JSON profiler reports

This introduces a JSON output format for cost-centre profiler reports.
It's not clear whether this is really something we want to introduce
given that we may also move to a more Haskell-driven output pipeline in
the future, but I nevertheless found this helpful, so I thought I would
put it up.

Test Plan: Compile a program with `-prof -fprof-auto`; run with `+RTS
-pj`

Reviewers: austin, erikd, simonmar

Reviewed By: simonmar

Subscribers: duncan, maoe, thomie, simonmar

Differential Revision: https://phabricator.haskell.org/D3132

2 years agoHave --backpack complain if multiple files are passed.
Edward Z. Yang [Thu, 23 Feb 2017 03:59:55 +0000 (19:59 -0800)] 
Have --backpack complain if multiple files are passed.

Summary:
At the moment it silently swallows the actual arguments; not good!

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: rwbarton, bgamari, austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3173

2 years agoGive better error message with you run ghc foo.bkp
Edward Z. Yang [Thu, 23 Feb 2017 03:54:40 +0000 (19:54 -0800)] 
Give better error message with you run ghc foo.bkp

Summary:
Detect Backpackish suffixes, and bail out if we try
to run them in the pipeline.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: rwbarton, bgamari, austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3172

2 years agotestsuite: Bump a performance tests
Ben Gamari [Thu, 23 Feb 2017 16:25:57 +0000 (11:25 -0500)] 
testsuite: Bump a performance tests

T5321Fun, T3064, and T12707 are failing, but only on Darwin. I suspect this is
probably creep from Typeable and pushed over the edge by some of Simon's recent
commits. Unfortunately the tree brokenness due to the recent submodule bumps
makes it difficult to pin down.

2 years agoSpelling only [ci skip]
Gabor Greif [Thu, 23 Feb 2017 16:01:07 +0000 (17:01 +0100)] 
Spelling only [ci skip]

2 years agoExport commentToAnnotation from Lexer.x
Alan Zimmerman [Thu, 23 Feb 2017 11:16:51 +0000 (13:16 +0200)] 
Export commentToAnnotation from Lexer.x

2 years agoDrop NFData constraint from compact.
Edward Z. Yang [Tue, 21 Feb 2017 05:50:41 +0000 (21:50 -0800)] 
Drop NFData constraint from compact.

Summary:
It's both unsound (easy to write a bogus NFData instance) and
incomplete (you might want to serialize data that doesn't have
an NFData instance, and will be fine at runtime.)  So better
just to drop it.  (By the way, we used to need the NFData
instance to "pre-evaluate" the data before we copied it into
the region, but since Simon Marlow rewrote the code to directly
evaluate and copy, this is no longer necessary.)

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: simonmar, austin, dfeuer, bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3168

2 years agoChangelog notice for compact.
Edward Z. Yang [Tue, 21 Feb 2017 00:25:00 +0000 (16:25 -0800)] 
Changelog notice for compact.

Test Plan: none

Reviewers: bgamari, austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3165

2 years agoRevert recent submodule bumps
Ben Gamari [Wed, 22 Feb 2017 16:35:30 +0000 (11:35 -0500)] 
Revert recent submodule bumps

They broke everything and the solution will be non-trivial.

This reverts commit 8ccbc2e5252abd4fa67d155d4fff489ee9929906.
This reverts commit c8d995db5d743358b0583fe97f8113bf9047641e.
This reverts commit 7153370288e6075c4f8c996ff02227e48805da06.

2 years agoBump time submodule
Ben Gamari [Tue, 21 Feb 2017 15:36:56 +0000 (10:36 -0500)] 
Bump time submodule

My previous attempt at bumping `time` was confused by a non-fast-forward
update from upstream. Here we merge the orphaned commit back into
master, fixing mirroring.

Also, we will now follow upstream's `ghc` branch instead of `master` to
prevent this sort of thing happening again in the future.

2 years agoA much nicer solution for typechecking ApplicativeDo
Simon Peyton Jones [Wed, 22 Feb 2017 13:45:52 +0000 (13:45 +0000)] 
A much nicer solution for typechecking ApplicativeDo

This patch improves the code for TcMatches.tcApplicativeStmts;
see the suggestion in Trac #13242 comment:9.

I now use (mapM goArg args) rather than a CPS-style fold.  The
result is less code, easier to understand, and automatically
fixes the original problem in Trac #13242.

See Note [ApplicativeDo and constraints].

2 years agoTest Trac #13244
Simon Peyton Jones [Wed, 22 Feb 2017 11:19:49 +0000 (11:19 +0000)] 
Test Trac #13244

2 years agoFix ApplicativeDo constraint scoping
Simon Peyton Jones [Wed, 22 Feb 2017 11:17:44 +0000 (11:17 +0000)] 
Fix ApplicativeDo constraint scoping

This patch fixes Trac #13242, by a bit of fancy footwork
with the LIE variable in which the WantedConstraints are
collected.

I think it can be simplified further, using a 'map'.

2 years agoTest Trac #13271
Simon Peyton Jones [Wed, 22 Feb 2017 08:43:58 +0000 (08:43 +0000)] 
Test Trac #13271

2 years agoBump Cabal and containers submodules
Ben Gamari [Tue, 21 Feb 2017 21:13:36 +0000 (16:13 -0500)] 
Bump Cabal and containers submodules

2 years agoFix all broken perf tests on x64 Windows
Tamar Christina [Tue, 21 Feb 2017 16:21:48 +0000 (11:21 -0500)] 
Fix all broken perf tests on x64 Windows

various perf tests have been broken over the course of the past few
months.  This updates the numbers.

Test Plan: ./validate

Reviewers: austin, bgamari

Subscribers: thomie, #ghc_windows_task_force

Differential Revision: https://phabricator.haskell.org/D3160

2 years agoTest Trac #13300
Simon Peyton Jones [Tue, 21 Feb 2017 17:44:02 +0000 (17:44 +0000)] 
Test Trac #13300

2 years agoGather constraints locally in checkMain
Simon Peyton Jones [Tue, 21 Feb 2017 15:53:06 +0000 (15:53 +0000)] 
Gather constraints locally in checkMain

Wiwth -fdefer-type-errors we were generating some top-level
equality constraints, just in a corner of checkMain.  The
fix is easy.

Fixes Trac #13292

2 years agoDisallow class instances for synonyms
Simon Peyton Jones [Tue, 21 Feb 2017 15:00:03 +0000 (15:00 +0000)] 
Disallow class instances for synonyms

See Trac #13267 and Note [Instances and constraint synonyms]
in TcValidity.

We can't easily do a perfect job, because the rename is really trying
to do its lookup too early.  But this is at least an improvement.

2 years agoA bit more tc-tracing in TcTyClsDecls
Simon Peyton Jones [Tue, 21 Feb 2017 14:40:59 +0000 (14:40 +0000)] 
A bit more tc-tracing in TcTyClsDecls

2 years agoRemove panics for TcTyCon
Simon Peyton Jones [Tue, 21 Feb 2017 14:34:50 +0000 (14:34 +0000)] 
Remove panics for TcTyCon

Previously TcTyCons were used only for knot-tying, but now they
are also used after an error, to add a benign TyCon to the envt
so we can carry on; see TyCon.makeRecoveryTyCon.  But since it
is used in this way, subsequent declarations may see a TcTyCon
(e.g. during injectivity checks) and should not have a heart attack
as a result.

See Note [TcTyCon] in TyCon.

This fixes Trac #13271

2 years agoA little refactoring of the simplifier around join points
Simon Peyton Jones [Tue, 21 Feb 2017 14:30:56 +0000 (14:30 +0000)] 
A little refactoring of the simplifier around join points

* Rename SimplEnv.setInScope to setInScopeAndZapFloats,
  because I keep forgetting that's what it does

* Remove unnecessary (and hence confusing) zapJoinFloats from
  simplLazyBind

* Reorder args of simplJoinRhs to put the cont last

2 years agoReplace some pushTcLevelM's with pushTcLevelM_
Ryan Scott [Tue, 21 Feb 2017 14:51:43 +0000 (09:51 -0500)] 
Replace some pushTcLevelM's with pushTcLevelM_

These occurrences of pushTcLevelM weren't using the resulting TcLevel,
so they can be replaced with the (ostensibly more efficient) pushTcLevelM_.

No change in behavior.

2 years agoMinor spelling, grammar, and formatting fixes
Ryan Scott [Tue, 21 Feb 2017 14:43:43 +0000 (09:43 -0500)] 
Minor spelling, grammar, and formatting fixes

[ci skip]

2 years agoFix SetLevels for join points
Simon Peyton Jones [Fri, 17 Feb 2017 15:03:52 +0000 (15:03 +0000)] 
Fix SetLevels for join points

This fixes Trac #13255.  The trouble was that we had a bottoming
join point, and tried to float it to top level. But it had free
JoinIds, so we tried to abstract over them.

Disaster.  Lint should have caught it, but didn't (now fixed).

This patch fixes the original problem.

2 years agoImprove Core Lint, mainly for join points
Simon Peyton Jones [Fri, 17 Feb 2017 15:03:01 +0000 (15:03 +0000)] 
Improve Core Lint, mainly for join points

* lintSingleBinding: check that join points have
                     a valid join-point type
  (Trac #13281)

* lintIdBinder: check that a JoinId is bound by
                a non-top-level let
  i.e.  not a top level binder
        not lambda/case binder

* Check for empty Rec [] bindings

* Rename lintIdBndrs to lintLetBndrs

2 years agotestsuite: Fix allocations of T10547
Ben Gamari [Tue, 21 Feb 2017 14:12:34 +0000 (09:12 -0500)] 
testsuite: Fix allocations of T10547

Previously the comment was correct, but the expected value itself was never
updated.

2 years agoRefactor inferConstraints not to use CPS
Simon Peyton Jones [Tue, 21 Feb 2017 14:27:30 +0000 (14:27 +0000)] 
Refactor inferConstraints not to use CPS

For some odd reason inferConstraints was using a CPS style,
which is entirely unnecessary.  This patch straightens it out.

No change in what it does.

2 years agoFix computation of dfun_tvs in mkNewTypeEqn
Simon Peyton Jones [Tue, 21 Feb 2017 13:29:16 +0000 (13:29 +0000)] 
Fix computation of dfun_tvs in mkNewTypeEqn

This bug was causing Trac #13297.

We were recomputing ds_tvs, and doing it wrongly (by omitting
variables that appear only in mtheta).  But actually plain 'tvs'
is just fine.  So code deleted, and bug fixed.

2 years agoFix DeriveAnyClass (again)
Simon Peyton Jones [Tue, 21 Feb 2017 10:27:41 +0000 (10:27 +0000)] 
Fix DeriveAnyClass (again)

This patch fixes Trac #13272.  The general approach was fine, but
we were simply not generating the correct implication constraint
(in particular generating fresh unification variables).  I added
a lot more commentary to Note [Gathering and simplifying
constraints for DeriveAnyClass]

I'm still not very happy with the overall architecture.  It feels
more complicate than it should.

2 years agoSpelling in comments only
Simon Peyton Jones [Tue, 21 Feb 2017 10:25:27 +0000 (10:25 +0000)] 
Spelling in comments only

2 years agobuild.mk: Add option for debug symbols
Ben Gamari [Tue, 21 Feb 2017 00:08:59 +0000 (19:08 -0500)] 
build.mk: Add option for debug symbols

2 years agoBump time submodule to 1.8
Ben Gamari [Mon, 20 Feb 2017 21:01:04 +0000 (16:01 -0500)] 
Bump time submodule to 1.8

This unfortunately had quite a number of knock-on effects, including a need for
new releases of directory and unix.

2 years agoBump Win32 submodule to 2.5.1.0
Ben Gamari [Mon, 20 Feb 2017 20:59:35 +0000 (15:59 -0500)] 
Bump Win32 submodule to 2.5.1.0

2 years agoBump a few more performance regressions from Type-indexed Typeable
Ben Gamari [Mon, 20 Feb 2017 18:30:49 +0000 (13:30 -0500)] 
Bump a few more performance regressions from Type-indexed Typeable

These are right on the edge of acceptance and are only reproducible on a
stressed machine.

2 years agoBump Cabal submodule
Ben Gamari [Mon, 20 Feb 2017 16:11:03 +0000 (11:11 -0500)] 
Bump Cabal submodule

We are now tracking the 2.0 branch.

2 years agoA number of Typeable wibbles from review
Ben Gamari [Sun, 19 Feb 2017 15:07:56 +0000 (10:07 -0500)] 
A number of Typeable wibbles from review

I forgot to fold these in to the patch merged earlier.

2 years agoRemove redundant import
Simon Peyton Jones [Fri, 17 Feb 2017 14:57:26 +0000 (14:57 +0000)] 
Remove redundant import

2 years agoFix Core pretty printer
Simon Peyton Jones [Fri, 17 Feb 2017 14:56:13 +0000 (14:56 +0000)] 
Fix Core pretty printer

If a JoinId (bogusly) ends up in an argument position we printed
    f jump j
rather than
    f (jump j)

Easy to fix.

2 years agoKill off the remaining Rec []
Simon Peyton Jones [Fri, 17 Feb 2017 14:55:06 +0000 (14:55 +0000)] 
Kill off the remaining Rec []

The desugarer was producing an empty Rec group, which is never
supposed to happen.  This small patch stops that happening.

Next up: Lint should check.

2 years agoChange -dppr-ticks to -dsuppress-ticks
Simon Peyton Jones [Fri, 17 Feb 2017 14:50:59 +0000 (14:50 +0000)] 
Change -dppr-ticks to -dsuppress-ticks

I spent about two hours today hunting fruitlessly for a simplifier
bug (when fixing Trac #13255), only to find that it was caused by
-ddump-X silently suppressing all ticks in Core.

I think this has happened to me once before.

So I've changed to make tick-printing on by default (like coercions,
etc), with a flag -dsuppress-ticks (like -dsuppress-coercions) to
suppress them.

Blargh.

-dppr-ticks is still there, but deprecated.

2 years agoTypos in manual, tests and comments
Gabor Greif [Wed, 15 Feb 2017 17:13:26 +0000 (18:13 +0100)] 
Typos in manual, tests and comments

2 years agoRemove ghc-api/landmine tests
Alan Zimmerman [Sun, 19 Feb 2017 11:40:52 +0000 (13:40 +0200)] 
Remove ghc-api/landmine tests

They take a long time to run, and are effectively superseded by the -ddump-*-ast
tests.

2 years agoImprove Haddock documentation for compact.
Edward Z. Yang [Sat, 18 Feb 2017 01:30:16 +0000 (17:30 -0800)] 
Improve Haddock documentation for compact.

Test Plan: none

Reviewers: simonmar, bgamari, austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3148

2 years agoDisable Typeable binding generation for unboxed sums
Ben Gamari [Sun, 12 Feb 2017 14:06:00 +0000 (09:06 -0500)] 
Disable Typeable binding generation for unboxed sums

These things are simply too expensive to generate at the moment. More
work is needed here; see #13276 and #13261.

2 years agoType-indexed Typeable
Ben Gamari [Thu, 2 Feb 2017 06:29:26 +0000 (01:29 -0500)] 
Type-indexed Typeable

This at long last realizes the ideas for type-indexed Typeable discussed in A
Reflection on Types (#11011). The general sketch of the project is described on
the Wiki (Typeable/BenGamari). The general idea is that we are adding a type
index to `TypeRep`,

    data TypeRep (a :: k)

This index allows the typechecker to reason about the type represented by the `TypeRep`.
This index representation mechanism is exposed as `Type.Reflection`, which also provides
a number of patterns for inspecting `TypeRep`s,

```lang=haskell
pattern TRFun :: forall k (fun :: k). ()
              => forall (r1 :: RuntimeRep) (r2 :: RuntimeRep)
                        (arg :: TYPE r1) (res :: TYPE r2).
                 (k ~ Type, fun ~~ (arg -> res))
              => TypeRep arg
              -> TypeRep res
              -> TypeRep fun

pattern TRApp :: forall k2 (t :: k2). ()
              => forall k1 (a :: k1 -> k2) (b :: k1). (t ~ a b)
              => TypeRep a -> TypeRep b -> TypeRep t

-- | Pattern match on a type constructor.
pattern TRCon :: forall k (a :: k). TyCon -> TypeRep a

-- | Pattern match on a type constructor including its instantiated kind
-- variables.
pattern TRCon' :: forall k (a :: k). TyCon -> [SomeTypeRep] -> TypeRep a
```

In addition, we give the user access to the kind of a `TypeRep` (#10343),

    typeRepKind :: TypeRep (a :: k) -> TypeRep k

Moreover, all of this plays nicely with 8.2's levity polymorphism, including the
newly levity polymorphic (->) type constructor.

Library changes
---------------

The primary change here is the introduction of a Type.Reflection module to base.
This module provides access to the new type-indexed TypeRep introduced in this
patch. We also continue to provide the unindexed Data.Typeable interface, which
is simply a type synonym for the existentially quantified SomeTypeRep,

    data SomeTypeRep where SomeTypeRep :: TypeRep a -> SomeTypeRep

Naturally, this change also touched Data.Dynamic, which can now export the
Dynamic data constructor. Moreover, I removed a blanket reexport of
Data.Typeable from Data.Dynamic (which itself doesn't even import Data.Typeable
now).

We also add a kind heterogeneous type equality type, (:~~:), to
Data.Type.Equality.

Implementation
--------------

The implementation strategy is described in Note [Grand plan for Typeable] in
TcTypeable. None of it was difficult, but it did exercise a number of parts of
the new levity polymorphism story which had not yet been exercised, which took
some sorting out.

The rough idea is that we augment the TyCon produced for each type constructor
with information about the constructor's kind (which we call a KindRep). This
allows us to reconstruct the monomorphic result kind of an particular
instantiation of a type constructor given its kind arguments.

Unfortunately all of this takes a fair amount of work to generate and send
through the compilation pipeline. In particular, the KindReps can unfortunately
get quite large. Moreover, the simplifier will float out various pieces of them,
resulting in numerous top-level bindings. Consequently we mark the KindRep
bindings as noinline, ensuring that the float-outs don't make it into the
interface file. This is important since there is generally little benefit to
inlining KindReps and they would otherwise strongly affect compiler performance.

Performance
-----------

Initially I was hoping to also clear up the remaining holes in Typeable's
coverage by adding support for both unboxed tuples (#12409) and unboxed sums
(#13276). While the former was fairly straightforward, the latter ended up being
quite difficult: while the implementation can support them easily, enabling this
support causes thousands of Typeable bindings to be emitted to the GHC.Types as
each arity-N sum tycon brings with it N promoted datacons, each of which has a
KindRep whose size which itself scales with N. Doing this was simply too
expensive to be practical; consequently I've disabled support for the time
being.

Even after disabling sums this change regresses compiler performance far more
than I would like. In particular there are several testcases in the testsuite
which consist mostly of types which regress by over 30% in compiler allocations.
These include (considering the "bytes allocated" metric),

 * T1969:  +10%
 * T10858: +23%
 * T3294:  +19%
 * T5631:  +41%
 * T6048:  +23%
 * T9675:  +20%
 * T9872a: +5.2%
 * T9872d: +12%
 * T9233:  +10%
 * T10370: +34%
 * T12425: +30%
 * T12234: +16%
 * 13035:  +17%
 * T4029:  +6.1%

I've spent quite some time chasing down the source of this regression and while
I was able to make som improvements, I think this approach of generating
Typeable bindings at time of type definition is doomed to give us unnecessarily
large compile-time overhead.

In the future I think we should consider moving some of all of the Typeable
binding generation logic back to the solver (where it was prior to
91c6b1f54aea658b0056caec45655475897f1972). I've opened #13261 documenting this
proposal.

2 years agoGeneralize kind of the (->) tycon
Ben Gamari [Thu, 2 Feb 2017 01:25:33 +0000 (20:25 -0500)] 
Generalize kind of the (->) tycon

This is generalizes the kind of `(->)`, as discussed in #11714.

This involves a few things,

 * Generalizing the kind of `funTyCon`, adding two new `RuntimeRep`
binders,
  ```lang=haskell
(->) :: forall (r1 :: RuntimeRep) (r2 :: RuntimeRep)
               (a :: TYPE r1) (b :: TYPE r2).
        a -> b -> *
  ```

 * Unsaturated applications of `(->)` are expressed as explicit
`TyConApp`s

 * Saturated applications of `(->)` are expressed as `FunTy` as they are
currently

 * Saturated applications of `(->)` are expressed by a new `FunCo`
constructor in coercions

 * `splitTyConApp` needs to ensure that `FunTy`s are split to a
`TyConApp`
   of `(->)` with the appropriate `RuntimeRep` arguments

 * Teach CoreLint to check that all saturated applications of `(->)` are
represented with `FunTy`

At the moment I assume that `Constraint ~ *`, which is an annoying
source of complexity. This will
be simplified once D3023 is resolved.

Also, this introduces two known regressions,

`tcfail181`, `T10403`
=====================
Only shows the instance,

    instance Monad ((->) r) -- Defined in ‘GHC.Base’

in its error message when -fprint-potential-instances is used. This is
because its instance head now mentions 'LiftedRep which is not in scope.
I'm not entirely sure of the right way to fix this so I'm just accepting
the new output for now.

T5963 (Typeable)
================

T5963 is now broken since Data.Typeable.Internals.mkFunTy computes its
fingerprint without the RuntimeRep variables that (->) expects. This
will be fixed with the merge of D2010.

Haddock performance
===================

The `haddock.base` and `haddock.Cabal` tests regress in allocations by
about 20%. This certainly hurts, but it's also not entirely unexpected:
the size of every function type grows with this patch and Haddock has a
lot of functions in its heap.