Add support for evaluation of type-level natural numbers.

This patch implements some simple evaluation of type-level expressions
featuring natural numbers.  We can evaluate *concrete* expressions that
use the built-in type families (+), (*), (^), and (<=?), declared in
GHC.TypeLits.   We can also do some type inference involving these
functions.  For example, if we encounter a constraint such as `(2 + x) ~ 5`
we can infer that `x` must be 3.  Note, however, this is used only to
resolve unification variables (i.e., as a form of a constraint improvement)
and not to generate new facts.  This is similar to how functional
dependencies work in GHC.

The patch adds a new form of coercion, `AxiomRuleCo`, which makes use
of a new form of axiom called `CoAxiomRule`.  This is the form of evidence
generate when we solve a constraint, such as `(1 + 2) ~ 3`.

The patch also adds support for built-in type-families, by adding a new
form of TyCon rhs: `BuiltInSynFamTyCon`.  such built-in type-family
constructors contain a record with functions that are used by the
constraint solver to simplify and improve constraints involving the
built-in function (see `TcInteract`).  The record in defined in `FamInst`.

The type constructors and rules for evaluating the type-level functions
are in a new module called `TcTypeNats`.
Fix static GHCi build (#8270)

When Ryan merged in the atomics branch, he made atomic_inc and
atomic_dec EXTERN_INLINE functions, meaning their definitions
became part of object files in the non-threaded build, instead of being
inlined. As a result, this broke the linker for static GHCi, since it
couldn't properly resolve the now-externally defined functions.

Signed-off-by: Austin Seipp <austin@well-typed.com>
Rename -ddump-cmm-rewrite to -ddump-cmm-sink

This makes it consistent with the corresponding -cmm-sink flag
Replace reference to `Data.Generics` with `Data.Data`

The `Data` definitions were moved from `Data.Generics` to
`Data.Data` via [5a9e76d24776608a3e14ba94f1dfa0cac072c251/base]

Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
Missing printf path format change
Update Cabal to current upstream `1.18` branch tip

The new commits inlcude AMP-warning fixes and support
for the new `instance Data Data.Version` provided by `base`
Release note for new `instance Data Data.Version`

Implemented in [e17549c80425f3c8a8a672c65bbff00290839f3c/base]

Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
Allow primclass and class constraints in primops

In preparation for the primitive class Coercible
Expose more in the TcS monad

in preparation for the Coercible class implementation.
Outputable.isOrAre: "is" or "are" for correct grammar
Expose tcTyConsOfType as Types.tyConsOfType

and add related function tyConsOfTyCon.
Introduce coerce :: Coercible a b -> a -> b

This is the result of the design at
http://ghc.haskell.org/trac/ghc/wiki/NewtypeWrappers

The goal is to be able to convert between, say [First Int] and [Last
Int] with zero run-time overhead. To that end, we introduce a special
two parameter type class Coercible whose instances are created
automatically and on-the fly. This relies on and exploits the recent
addition of roles to core.
Fix rebase fallout

To push what was validated, not just what was commited.
Implement .init/.init_array support for ELF.

Signed-off-by: Edward Z. Yang <ezyang@mit.edu>
Implement .ctor support for PEi386.

Signed-off-by: Edward Z. Yang <ezyang@mit.edu>
Implement __mod_init_func for Mach-O. Finishes support for init in #5435.

Signed-off-by: Edward Z. Yang <ezyang@mit.edu>
Give language pragma suggestions without -X

for easier copy'n'paste. This fixes: #3647
Fix links in #special-ids section

This completes the change from [7ea49661c]: GHC.Exts lives in base, not
in ghc-prim.
Mention coerce in the release notes

It is not added to the section on Special built-in functions because
the (from a user POV related) unsafeCoerce has been removed there
recently.