GHC 9.12.1-alpha3 is now available

The GHC developers are very pleased to announce the availability
of the third alpha release of GHC 9.12.1. Binary distributions, source
distributions, and documentation are available at downloads.haskell.org.

We hope to have this release available via ghcup shortly.

GHC 9.12 will bring a number of new features and improvements, including:

  • The new language extension OrPatterns allowing you to combine multiple
    pattern clauses into one.

  • The MultilineStrings language extension to allow you to more easily write
    strings spanning multiple lines in your source code.

  • Improvements to the OverloadedRecordDot extension, allowing the built-in
    HasField class to be used for records with fields of non lifted representations.

  • The NamedDefaults language extension has been introduced allowing you to
    define defaults for typeclasses other than Num.

  • More deterministic object code output, controlled by the -fobject-determinism
    flag, which improves determinism of builds a lot (though does not fully do so)
    at the cost of some compiler performance (1-2%). See #12935 for the details

  • GHC now accepts type syntax in expressions as part of GHC Proposal #281.

  • The WASM backend now has support for TemplateHaskell.

  • … and many more

A full accounting of changes can be found in the release notes.
As always, GHC’s release status, including planned future releases, can
be found on the GHC Wiki status.

We would like to thank GitHub, IOG, the Zw3rk stake pool,
Well-Typed, Tweag I/O, Serokell, Equinix, SimSpace, the Haskell
Foundation, and other anonymous contributors whose on-going financial
and in-kind support has facilitated GHC maintenance and release
management over the years. Finally, this release would not have been
possible without the hundreds of open-source contributors whose work
comprise this release.

As always, do give this release a try and open a ticket if you see
anything amiss.

Cheers,
Zubin

9 Likes

If you want to try with Stack:

  1. Upgrade to the master branch version of Stack (can be used only if you are not using GHCup to manage versions of Stack): stack upgrade --source-only --git.

  2. A. If you are not using GHCup to manage versions of GHC, augment Stack’s default setup-info dictionary in a configuration file (needed only until Stack has fetched the compiler once). For example, on Windows:

setup-info:
  ghc:
    windows64:
      9.12.0.20241114:
        url: https://downloads.haskell.org/ghc/9.12.1-alpha3/ghc-9.12.0.20241114-x86_64-unknown-mingw32.tar.xz
        # Can be extended with SHA protections etc: see https://docs.haskellstack.org/en/stable/configure/yaml/non-project/#setup-info
  1. B. If you are using GHCup to manage versions of GHC, augment ~/.ghcup/config.yaml. For example:
url-source:
  - StackSetupURL
  - setup-info:
      ghc:
        windows:
          9.12.0.20241114:
            url: https://downloads.haskell.org/ghc/9.12.1-alpha3/ghc-9.12.0.20241114-x86_64-unknown-mingw32.tar.xz
            # Can be extended with SHA protections etc: see https://docs.haskellstack.org
  1. Specify the compiler in a Stack configuration file (eg stack.yaml):
compiler: ghc-9.12.0.20241114
compiler-check: match-exact # In case you already have GHC 9.12.0.x