There is a new extension ExplicitNamespaces that allows to qualify the export of a type with the type keyword.

The behavior of the TypeOperator extension has changed: previously, only type operators starting with ":" were considered type constructors, and other operators were treated as type variables. Now type operators are always constructors.

It is now possible to explicitly annotate types with kind variables (#5862). You can now write, for example: class Category (c :: k -> k -> *) where type Ob c :: k -> Constraint id :: Ob c a => c a a (.) :: (Ob c a, Ob c b, Ob c c) => c b c -> c a b -> c a c and the variable k , ranging over kinds, is in scope within the class declaration.

It is now possible to derive instances of Generic1 automatically. See Section 7.22, “Generic programming” for more information.

There is a new FFI calling convention capi , enabled by the CApiFFI extension. For example, given the following declaration: foreign import capi "header.h f" f :: CInt -> IO CInt GHC will generate code to call f using the C API defined in the header header.h . Thus f can be called even if it may be defined as a CPP #define , rather than a proper function.

There is a new pragma CTYPE , which can be used to specify the C type that a Haskell type corresponds to, when it is used with the capi calling convention.

Generic default methods are now allowed for multi-parameter type classes.

A constructor of a GADT is now considered infix (by a derived Show instance) if it is a two-argument operator with a fixity declaration (#5712).

There is a new extension InstanceSigs , which allows type signatures to be specified in instance declarations.

GHC now supports numeric and string type literals (enabled by DataKinds ), of kind Nat and Symbol respectively (see Section 7.9.5, “Promoted Literals”).

The type Any can now be used as an argument for foreign prim functions.

The mdo keyword has been reintroduced. This keyword can be used to create do expressions with recursive bindings. The behavior of the rec keyword has been changed, so that it does not perform automatic segmentation in a do expression anymore.

There is a new syntactic construct (enabled by the LambdaCase extension) for creating an anonymous function out of a case expression. For example, the following expression: \case Nothing -> 0 Just n -> n is equivalent to: \x -> case x of Nothing -> 0 Just n -> n See Section 7.3.15, “Lambda-case” for more details.

There is a new syntactic construct (enabled by the MultiWayIf extension) to create conditional expressions with multiple branches. For example, you can now write: if | x == 0 -> [...] | x > 1 -> [...] | x < 0 -> [...] | otherwise -> [...] See Section 7.3.16, “Multi-way if-expressions” for more information.