Release notes for version 7.8.1 The significant changes to the various parts of the compiler are listed in the following sections. There have also been numerous bug fixes and performance improvements over the 7.6 branch. Highlights The highlights, since the 7.6 branch, are: GHC now supports "type holes" with the TypeHoles extension. When enabled, the unbound literal _ may be used during development in place of a regular identifier, and GHC will respond with the type necessary to "fill in the hole." TODO FIXME: reference. It is now possible to declare a 'closed' type family when using the TypeFamilies extension. A closed type family cannot have any instances created other than the ones in its definition. TODO FIXME: reference. GHC now supports overloading list literals using the new OverloadedLists extension. TODO FIXME: reference. There has been significant overhaul of the type inference engine and constraint solver. TODO FIXME: reference. By default, GHC will now unbox all "small" strict fields in a data type. A "small" data type is one whose size is equivalent to or smaller than the native word size of the machine. This means you no longer have to specify UNPACK pragmas for e.g. strict Int fields. This also applies to floating-point values. GHC now has a brand-new I/O manager that scales significantly better for larger workloads compared to the previous one. It should scale linearly up to approximately 32 cores. The LLVM backend now supports 128bit SIMD operations. This is now exploited in both the vector and dph packages, exposing a high level interface. TODO FIXME: reference. This is only available with the LLVM backend. The new code generator, after significant work by many individuals over the past several years, is now enabled by default. This is a complete rewrite of the STG to Cmm transformation. In general, your programs may get slightly faster. The old code generator has been removed completely. TODO: mention dynamic changes TODO: mention new Typeable and AutoDeriveTypeable Full details Language There is a new extension, NullaryTypeClasses, which allows you to declare a type class without any parameters. TODO FIXME: example? Compiler GHC now supports a --show-options flag, which will dump all of the flags it supports to standard out. It's now possible to switch the system linker on Linux (between GNU gold and GNU ld) at runtime without problem. The -fwarn-dodgy-imports flag now warns in the case an import statement hides an entity which is not exported. The LLVM backend was overhauled and rewritten, and should hopefully be easier to maintain and work on in the future. GHCi GHCi now supports a prompt2 setting, which allows you to customize the continuation prompt of multi-line input. TODO FIXME: reference. Template Haskell TODO FIXME Runtime system The performance of StablePtrs and StableNames has been improved. Build system GHC >= 7.4 is now required for bootstrapping. GHC can now be built with Clang, and use Clang as the preprocessor for Haskell code. Only Clang version 3.4svn is reliably supported. Libraries There have been some changes that have effected multiple libraries: TODO FIXME The following libraries have been removed from the GHC tree: TODO FIXME The following libraries have been added to the GHC tree: TODO FIXME array Version number XXXX (was XXXX) base Version number 4.7.0.0 (was 4.6.0.1) The Control.Category module now has the PolyKinds extension enabled, meaning that instances of Category no longer need be of kind * -> * -> * There are now Foldable and Traversable instances for Either a and (,) a Control.Concurrent.MVar has a new implementation of readMVar, which fixes a long-standing bug where readMVar is only atomic if there are no other threads running putMVar. readMVar now is atomic, and is guaranteed to return the value from the first putMVar. There is also a new tryReadMVar which is a non-blocking version. There are now byte endian-swapping primitives available in Data.Word, which use optimized machine instructions when available. bin-package-db This is an internal package, and should not be used. binary Version number XXXX (was XXXX) bytestring Version number XXXX (was XXXX) Cabal Version number XXXX (was XXXX) containers Version number XXXX (was XXXX) deepseq Version number XXXX (was XXXX) directory Version number XXXX (was XXXX) filepath Version number XXXX (was XXXX) ghc-prim Version number XXXX (was XXXX) haskell98 Version number XXXX (was XXXX) haskell2010 Version number XXXX (was XXXX) hoopl Version number XXXX (was XXXX) hpc Version number XXXX (was XXXX) integer-gmp Version number XXXX (was XXXX) old-locale Version number XXXX (was XXXX) old-time Version number XXXX (was XXXX) process Version number XXXX (was XXXX) template-haskell Version number XXXX (was XXXX) time Version number XXXX (was XXXX) unix Version number XXXX (was XXXX) Win32 Version number XXXX (was XXXX)