Eta now supports reproducibility by default. If you need details on how to see this in action, check out this gist.

Base-4.11.1.0

Some parts of the Hackage ecosystem (such as conduit) have decided to break backwards compatibility by putting a lower bound on the base package. Because these packages are extremely important for practical development we decided to go ahead and upgrade the base to v4.11.1.0 .

We’ve also patched older versions of existing libraries with backwards compatible changes to ensure that your Eta builds will just work regardless of which version of Eta you use. In the future our patching mechanism will be used to maintain backwards compatibility if we ever make breaking changes.

Backpack

In order to support better extensibility at compile-time while keeping good performance we took sometime to port Backpack into Eta. Backpack allows you to import modules that just have signatures instead of actual implementation and fill in the signatures at a later time (say in your main app).

This feature was added keeping in mind that we will eventually include Fibers in the standard library and we wanted to give the users the flexibility to use Eta Fibers by default if that makes sense for their application.

Language Extensions

ApplicativeDo: The Applicative abstraction can be used without all the noisy operators with this extension.

Example using the ApplicativeDo extension

Strict/StrictData: These extensions allow you to use Eta as a strict language in the modules for which they are enabled. This is useful for the modules in your codebase that should be high-performance and memory efficient.

Example using the StrictData extension

Library Stabilizations

We patched many non-trivial packages so that we can support development of business-critical applications. In particular we’ve implemented many cryptographic primitives with the help of the BouncyCastle library.

Web Development

Web frameworks— Servant, Scotty, Spock, and Yesod

Web servers— Warp

Examples: Scotty, Spock, and Yesod

Compilers

Purescript — A typed functional language that compiles to JavaScript and great for front-end development.

Dhall — A typed configuration language that is guaranteed to terminate. Allows you to re-use common configuration in a type-safe way.

See eta-hackage for a list of all the supported packages. Note that it is incomplete and it only contains the packages we have tried out ourselves. Feel feel to send a PR for any missing packages that do work.

Nix Builds

Brian McKenna has been working a lot on improving Nix support for Eta.

To try out Nix with Eta, head over to this page.

Nix with Eta

Pattern Match Checking

We’ve backported GHC 8’s pattern match checker which performs intelligent exhaustiveness checking, especially for GADTs.

GADT Pattern Match Checking

In the older versions, the code above would have produced an incorrect warning message saying that you forgot to handle a case. From this version onward, it’s fixed and your code will compile without warnings.

Warning Messages

Warnings now give a proper context showing you exactly which flags enable the warning in the first place, making day-to-day usage a bit smoother.

Better warning messages in Eta

In the above example the warning is caused by -Wunused-imports flag.

Major Bug Fixes