11.38.1
2
3* [Add `INLINABLE` annotations in more places](https://github.com/dhall-lang/dhall-haskell/pull/2164)
4    * This may improve performance by enabling more specializations
5* [Fix `hashable`-related test failures](https://github.com/dhall-lang/dhall-haskell/pull/2152)
6* [Fix support for GHC 8.4.4](https://github.com/dhall-lang/dhall-haskell/pull/2143)
7    * … by using `GeneralizedNewtypeDeriving` (with a `z`)
8* [Allow doctest-0.18](https://github.com/dhall-lang/dhall-haskell/pull/2148)
9* [Allow bytestring-0.11](https://github.com/dhall-lang/dhall-haskell/pull/2144)
10
111.38.0
12
13* [BREAKING CHANGE: Detect preferred character set from input](https://github.com/dhall-lang/dhall-haskell/pull/2108)
14    * `dhall format` will now preserve the character set of the formatted file
15      by default.  In other words, if the file uses ASCII punctuation then
16      `dhall format` will format the file using ASCII punctuation.
17    * If the file contains both ASCII and Unicode punctuation it will prefer
18      Unicode by default
19    * This is a breaking change because the `Lam` / `Pi` / `Combine` /
20      `CombineTypes`, and `Prefer` constructors now take an additional argument
21      to record which character set was used
22* [BUG FIX: Fix CORS compliance check](https://github.com/dhall-lang/dhall-haskell/pull/2121)
23    * Previous versions were not correctly enforcing CORS compliance
24    * This implies that some imports that would have worked previously by
25      accident will now fail; specifically: an import from one domain
26      transitively importing something from another domain that has not opted
27      into CORS
28* [Add `ToDhall (Fix f)` instance](https://github.com/dhall-lang/dhall-haskell/pull/2122)
29* Fixes and improvements to error messages
30    * [#2130](https://github.com/dhall-lang/dhall-haskell/pull/2130)
31
321.37.1
33
34* [Fix performance regression for `with` expressions](https://github.com/dhall-lang/dhall-haskell/pull/2112)
35
361.37.0
37
38* [Supports version 20.0.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v20.0.0)
39    * [Implement revised `Text/replace` β-normalization](https://github.com/dhall-lang/dhall-haskell/pull/2072)
40    * [Allow `Text/replace ""` to support an abstract haystack](https://github.com/dhall-lang/dhall-haskell/pull/2084)
41    * [Support `if` expressions returning a type or kind](https://github.com/dhall-lang/dhall-haskell/pull/2080)
42* BREAKING CHANGE TO THE API: [Improve error message for duplicate projection label](https://github.com/dhall-lang/dhall-haskell/pull/2097)
43    * This also makes the implementation more standards-compliant, by treating
44      a duplicate label as a type error instead of a parse error
45    * This is a breaking change since the `Project` constructor now stores a
46      `[Text]` instead of `Set Text`
47* [Add `--cache` flag to `dhall hash`](https://github.com/dhall-lang/dhall-haskell/pull/2093)
48    * This flag adds the hashed expression to the cache when enabled
49* [Deprecate `Inject` / `Interpret`](https://github.com/dhall-lang/dhall-haskell/pull/2099)
50    * You should instead use `ToDhall` / `FromDhall`, respectively
51* Fixes and improvements to the haddocks:
52    * [#2098](https://github.com/dhall-lang/dhall-haskell/pull/2098)
53    * [#2100](https://github.com/dhall-lang/dhall-haskell/pull/2100)
54* Fixes and improvements to error messages:
55    * [#2082](https://github.com/dhall-lang/dhall-haskell/pull/2082)
56    * [#2095](https://github.com/dhall-lang/dhall-haskell/pull/2095)
57* Fixes and improvements to the parser:
58    * [#2083](https://github.com/dhall-lang/dhall-haskell/pull/2089)
59* Fixes and improvements to the pretty printer:
60    * [#2083](https://github.com/dhall-lang/dhall-haskell/pull/2083)
61    * [#2101](https://github.com/dhall-lang/dhall-haskell/pull/2101)
62
631.36.0
64
65* [Supports version 19.0.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v19.0.0)
66    * BREAKING CHANGE TO THE API: [Add `Text/replace` built-in](https://github.com/dhall-lang/dhall-haskell/pull/2063)
67    * [Implement `with` without syntactic sugar](https://github.com/dhall-lang/dhall-haskell/pull/2055)
68* [`dhall lint` will now add a `.dhall` extension to all Prelude imports](https://github.com/dhall-lang/dhall-haskell/pull/2061)
69    * The old extension-free Prelude imports are deprecated
70* [Fix command-line completions for files](https://github.com/dhall-lang/dhall-haskell/pull/2016)
71* [Improve Template Haskell support for record constructors](https://github.com/dhall-lang/dhall-haskell/pull/2070)
72* Fixes and improvements to code formatting
73    * [#2037](https://github.com/dhall-lang/dhall-haskell/pull/2037)
74    * [#2048](https://github.com/dhall-lang/dhall-haskell/pull/2048)
75    * [#2069](https://github.com/dhall-lang/dhall-haskell/pull/2069)
76
771.35.0
78
79* [Supports version 18.0.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v18.0.0)
80    * [Implement more efficient `with` desugaring](https://github.com/dhall-lang/dhall-haskell/pull/1993)
81        * Chained `with` expressions will now be much more efficient
82* [BREAKING CHANGE TO THE API: Preserve whitespace for `Lam` constructor](https://github.com/dhall-lang/dhall-haskell/pull/1980)
83    * This change extends the `Lam` constructor to preserve whitespace around
84      the variable binding
85    * The motivation for this change is to enable `dhall-docs` to support
86      jumping to definitions
87    * You can replace your existing `Lam` constructors with
88      `Dhall.Core.makeFunctionBinding`
89* [BREAKING CHANGE TO THE API: Preserve whitespace for `Field` constructors](https://github.com/dhall-lang/dhall-haskell/pull/1991)
90    * This change extends the `Field` constructor to preserve whitespace around
91      the selected field
92    * The motivation for this change is to enable `dhall-docs` to support
93      jumping to definitions
94    * You can use `Dhall.Core.makeFieldSelection` and
95      `Dhall.Core.fieldSelectionLabel` to convert between the detailed and the
96      simple representation of the selected field.
97* [Add `FromDhall` instances for `{Int,Word}{,8,16,32,64}`](https://github.com/dhall-lang/dhall-haskell/pull/2012)
98* [Add `--output` option for `dhall text` subcommand](https://github.com/dhall-lang/dhall-haskell/pull/1974)
99* [Add `Dhall.Crypto.toString`](https://github.com/dhall-lang/dhall-haskell/pull/1976)
100* [Make the HTTP `Manager` configurable](https://github.com/dhall-lang/dhall-haskell/pull/2027)
101    * Several import-related functions now provide an alternative variants that
102      allows the user to supply a custom `Manager`
103    * You can use this to tweak HTTP request timeouts or use a different TLS
104      manager (e.g. one from `http-client-openssl`)
105* Fixes and improvements to code formatting
106    * [#2000](https://github.com/dhall-lang/dhall-haskell/pull/2000)
107    * [#2021](https://github.com/dhall-lang/dhall-haskell/pull/2021)
108
109      The formatter now preserves comments for record fields (both record types
110      and record literals)
111* Fixes and improvements to documentation
112    * [#2011](https://github.com/dhall-lang/dhall-haskell/pull/2011)
113    * [#2013](https://github.com/dhall-lang/dhall-haskell/pull/2013)
114    * [#2014](https://github.com/dhall-lang/dhall-haskell/pull/2014)
115* Fixes and improvements to test suite
116    * [#2020](https://github.com/dhall-lang/dhall-haskell/pull/2020)
117
1181.34.0
119
120* [Supports version 17.1.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v17.1.0)
121    * [Add support for trailing commas](https://github.com/dhall-lang/dhall-haskell/pull/1885)
122* BREAKING CHANGE to the API: [Support prefix comments on record key-value pairs](https://github.com/dhall-lang/dhall-haskell/pull/1908)
123    * The Dhall AST (i.e. `Expr`) now preserves some comments for record types
124      and record literals
125    * The impact of this change is that you will need to add
126      `Dhall.Syntax.makeRecordField` or `Dhall.Syntax.recordFieldValue` in a few
127      places wherever your Haskell assembles or disassembles record expressions
128    * The motivation of this change is two-fold:
129        * To eventually enable `dhall-docs` support for rendering record
130          comments as documentation
131        * To eventually enable support for preserving record-related comments
132          when formatting Dhall code
133* BUG FIX: [Fix `with` expressions to permit functions on their left-hand side](https://github.com/dhall-lang/dhall-haskell/pull/1897)
134    * This was a case of the Haskell implementation not being compliant with the
135      standard grammar
136* [Drop support for GHC 8.2](https://github.com/dhall-lang/dhall-haskell/pull/1949)
137* [Add a new `dhall rewrite-with-schemas` command](https://github.com/dhall-lang/dhall-haskell/pull/1902)
138    * You can now simplify a Dhall expression using a schema record (e.g. a
139      `./schemas.dhall` record that a package might provide)
140    * This simplification replaces large anonymous records with an
141      equivalent use of a record completion when possible
142* [Add `--transitive` flag to `dhall {format,lint,freeze}](https://github.com/dhall-lang/dhall-haskell/pull/1880)
143    * This flag lets you format/lint/freeze a file and all of its transitive
144      dependencies that are reachable via relative file imports
145* [Move `man/dhall.1` to `data-files`](https://github.com/dhall-lang/dhall-haskell/pull/1921)
146    * This ensures that Cabal will install `dhall`'s `man` pages in the
147      correct directory
148* Performance improvements
149    * [#1879](https://github.com/dhall-lang/dhall-haskell/pull/1879)
150* Standards compliance
151    * [#1953](https://github.com/dhall-lang/dhall-haskell/pull/1953)
152    * [#1954](https://github.com/dhall-lang/dhall-haskell/pull/1954)
153    * [#1956](https://github.com/dhall-lang/dhall-haskell/pull/1956)
154    * [#1957](https://github.com/dhall-lang/dhall-haskell/pull/1957)
155    * [#1958](https://github.com/dhall-lang/dhall-haskell/pull/1958)
156* Fixes and improvements to haddocks
157    * [#1881](https://github.com/dhall-lang/dhall-haskell/pull/1881)
158    * [#1955](https://github.com/dhall-lang/dhall-haskell/pull/1955)
159
1601.33.1
161
162* [Multi-line REPL / support `repline-0.4.0.0`](https://github.com/dhall-lang/dhall-haskell/pull/1867)
163    * `dhall repl` supports a new `:paste` command that lets you input a command
164       by pasting one or more lines
165
1661.33.0
167
168* [Supports version 17.0.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v17.0.0)
169    * BREAKING CHANGE: [URLs no longer support quoted path components](https://github.com/dhall-lang/dhall-haskell/pull/1812)
170    * BREAKING CHANGE: [`Optional/{fold,build}` are no longer built-ins](https://github.com/dhall-lang/dhall-haskell/pull/1802)
171    * [Record fields now permit empty labels](https://github.com/dhall-lang/dhall-haskell/pull/1812)
172* BREAKING CHANGE: [Fail instead of hanging when deriving `FromDhall` for recursive types](https://github.com/dhall-lang/dhall-haskell/pull/1825)
173    * This is a breaking change as now the `expected` type returns an
174      `Expector (Expr Src Void)` (essentially an `Either`) instead of
175      `Expr Src Void`
176    * If you really don't want to handle the new error-related wrapper, you can
177      get the old behavior using a partial pattern match (which will be partial,
178      still an improvement over the previous behavior, which was hanging)
179* [Fix invalid cache entries](https://github.com/dhall-lang/dhall-haskell/pull/1793)
180    * The interpreter will now correct cached expressions that are incorrect
181      and warn you when this happens
182    * Specifically, if there is a hash mismatch from the cached expression the
183      interpreter will resolve the import again and fix the cache if the
184      resolved import matches the expected hash
185* [Make `encodeExpression` polymorphic](https://github.com/dhall-lang/dhall-haskell/pull/1789)
186    * `encodeExpression` now has a more general type, which means that you
187      can use it to serialise expressions without imports (i.e.
188      ones of type `Expr Void Void`)
189* [Add `--quiet` option for `dhall decode`](https://github.com/dhall-lang/dhall-haskell/pull/1803)
190* [Add `--noted` flag for `dhall haskell-syntax-tree`](https://github.com/dhall-lang/dhall-haskell/pull/1843)
191* Performance improvements:
192    * There were several performance improvements related to binary decoding,
193      which should improve cache lookup speed
194    * [#1807](https://github.com/dhall-lang/dhall-haskell/pull/1807)
195    * [#1809](https://github.com/dhall-lang/dhall-haskell/pull/1809)
196    * [#1857](https://github.com/dhall-lang/dhall-haskell/pull/1857)
197* Improvements to error messages
198    * [#1824](https://github.com/dhall-lang/dhall-haskell/pull/1824)
199    * [#1849](https://github.com/dhall-lang/dhall-haskell/pull/1849)
200    * [#1851](https://github.com/dhall-lang/dhall-haskell/pull/1851)
201* Fixes to haddocks
202    * [#1815](https://github.com/dhall-lang/dhall-haskell/pull/1815)
203
2041.32.0
205
206* [Supports version 16.0.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v16.0.0)
207    * BREAKING CHANGE: Change the precedence of `with` and `===`
208        * The precedence change to `with` means that some old expressions that
209          were valid now require explicit parentheses
210    * BREAKING CHANGE: Use RFC7049bis encoding for `Double`s
211        * This is a breaking change because the hashes of expressions with small
212          `Double` literals will change now
213    * Add support for unions mixing terms and types
214        * For example, `< A : Bool | B : Type >` is legal now
215        * You can now write `someRecord with a.b.c = x` to update a nested
216          fields
217* DEPRECATION: [Deprecate `Dhall.Parser.exprA`](https://github.com/dhall-lang/dhall-haskell/pull/1740)
218    * `Dhall.Parser` module will eventually drop support for parsing custom
219      import types
220    * This is necessary in order to fix several parsing bugs and improve
221      parsing error messages
222* BUG FIX: [GHC Generics instance for `:+:` now uses `union`](https://github.com/dhall-lang/dhall-haskell/pull/1725)
223    * This fixes a few subtle bugs in how Dhall unions are marshalled into
224      Haskell types, and also improves the error messages
225* Formatting improvements
226    * [Change formatting of `if` expressions](https://github.com/dhall-lang/dhall-haskell/pull/1767)
227    * [Change formatting for functions and their types](https://github.com/dhall-lang/dhall-haskell/pull/1759)
228    * [Prefer puns when formatting record completions](https://github.com/dhall-lang/dhall-haskell/pull/1736)
229* [Convert union alternatives to directory tree](https://github.com/dhall-lang/dhall-haskell/pull/1757)
230    * `dhall to-directory-tree` now supports unions which are automatically
231      unwrapped
232* [Fix `dhall freeze --cache` to better handle protected imports](https://github.com/dhall-lang/dhall-haskell/pull/1772)
233    * `dhall freeze --cache` will now also update imports that already have
234      integrity checks
235* [Don't normalized partially saturated `{List,Natural}/fold`](https://github.com/dhall-lang/dhall-haskell/pull/1742)
236    * The behavior now matches the standard.  Previously, the Haskell
237      implementation was not standards-compliant because it would normalize
238      these partially saturated built-ins
239
2401.31.1
241
242* BUG FIX: [Allow whitespace after record pun entry](https://github.com/dhall-lang/dhall-haskell/pull/1733)
243    * The record pun feature introduced in the previous release did not
244      correctly parse record puns with trailing whitespace, which this change
245      fixes.
246* [Expose `{default,}InputNormalizer`](https://github.com/dhall-lang/dhall-haskell/pull/1727)
247    * The previous version introduced a breaking change to the `autoWith` type
248      that required access to the implementation of `InputNormalizer`, which was
249      not exported.  This change fixes that.
250* Build against latest dependencies
251    * [`QuickCheck-2.14`](https://github.com/dhall-lang/dhall-haskell/pull/1721)
252    * [`haskell-lsp-0.21`](https://github.com/dhall-lang/dhall-haskell/pull/1730)
253    * [`repline-0.3` / `haskeline-0.8`](https://github.com/dhall-lang/dhall-haskell/pull/1717)
254    * [`template-haskell-2.16`](https://github.com/dhall-lang/dhall-haskell/pull/1719)
255* [Prefer to format using record puns when possible](https://github.com/dhall-lang/dhall-haskell/pull/1729)
256    * `dhall format` will now reformat code to use record puns when applicable
257* Fixes and improvements to error messages:
258    * [#1721](https://github.com/dhall-lang/dhall-haskell/pull/1724)
259
2601.31.0
261
262* [Supports version 15.0.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v15.0.0)
263    * [Implement `with` keyword](https://github.com/dhall-lang/dhall-haskell/pull/1685)
264        * You can now write `someRecord with a.b.c = x` to update a nested
265          fields
266    * [Add support for record puns](https://github.com/dhall-lang/dhall-haskell/pull/1710)
267        * You can now write `{ x, y }` as a shorthand for `{ x = x, y = y }`
268* BREAKING CHANGE TO THE API: [Auto-derive `Generic`/`FromDhall`/`ToDhall` with Template Haskell](https://github.com/dhall-lang/dhall-haskell/pull/1682)
269    * Now the `Dhall.TH.makeHaskell*` utilities will include these derived
270      instances in the generated declarations
271    * This is a breaking change since users were likely already generating these
272      instances separately, which will now conflict with the included instances
273* BREAKING CHANGE TO THE API: [`From/ToDhall` no longer takes `InterpretOptions` argument](https://github.com/dhall-lang/dhall-haskell/pull/1696)
274    * The types of the `autoWith` and `injectWith` methods have changed to
275      take an `InputNormalizer` instead of an `InterpretOptions`
276        * Note that `InputNormalizer` is a subset of `InterpretOptions`
277    * This is a breaking change to how derived `FromDhall` / `ToDhall` instances
278      are customized to more closely match how other Haskell packages customize
279      derived instances (e.g. `aeson` with `FromJSON` / `ToJSON`)
280        * Previously you would customize the behavior globally by passing in
281          a top-level `InterpretOptions` record to `autoWith`
282        * Now you can customize the behavior locally on a per-instance basis
283    * This change enables the following change ...
284* [Add `Dhall.Deriving` module for `deriving-via` helpers](https://github.com/dhall-lang/dhall-haskell/pull/1700)
285    * Now you can take advantage of the `-XDerivingVia` language extension to
286      customize derived `FromDhall`/`ToDhall` instances, like this:
287        * `deriving (FromDhall, ToDhall) via Codec (SetSingletonConstructors Bare) Name`
288* BREAKING CHANGE TO THE LANGUAGE: [Match standard with respect to `using toMap`](https://github.com/dhall-lang/dhall-haskell/pull/1673)
289    * `https://example.com using toMap customHeaders` is now a parse error
290      and needs to be explicitly parenthesized as
291      `https://example.com using (toMap customHeaders)`
292    * The language standard had always required the parentheses, but the Haskell
293      implementation was not correctly matching the standard
294* [Fix formatting of indented comments containing empty lines](https://github.com/dhall-lang/dhall-haskell/pull/1688)
295    * `dhall format` was previously not idempotent when formatting indented
296      comments with empty lines
297    * Specifically, the formatter kept indenting things further with each
298      format, which this change fixes
299* [Fix pretty-printer to preserve original numeric literals](https://github.com/dhall-lang/dhall-haskell/pull/1674)
300    * Now `dhall format` will preserve numeric literals exactly how you wrote
301      them
302    * For example, `0xFF` will no longer be reformatted as `255`
303* [Add `dhall to-directory-tree` support for `Map`s](https://github.com/dhall-lang/dhall-haskell/pull/1705)
304    * `Map`s are now converted to directories (just like records)
305* [Add manpage](https://github.com/dhall-lang/dhall-haskell/pull/1677)
306    * ... mainly for the benefit of people packaging Dhall for various
307      distributions
308* [Group commands in CLI](https://github.com/dhall-lang/dhall-haskell/pull/1692)
309    * The command-line `--help` output now groups commands into useful
310      sections
311* [Fix numeric parsing for GHCJS](https://github.com/dhall-lang/dhall-haskell/pull/1681)
312    * The GHCJS backend for Dhall was failing to parse numbers, which this
313      change fixes
314* Fixes and improvements to error messages:
315    * [#1656](https://github.com/dhall-lang/dhall-haskell/pull/1656)
316    * [#1698](https://github.com/dhall-lang/dhall-haskell/pull/1698)
317    * [#1702](https://github.com/dhall-lang/dhall-haskell/pull/1702)
318* Fixes and improvements to the haddocks:
319    * [#1708](https://github.com/dhall-lang/dhall-haskell/pull/1708)
320    * [#1712](https://github.com/dhall-lang/dhall-haskell/pull/1712)
321
3221.30.0
323
324* [Supports version 14.0.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v14.0.0)
325* BREAKING CHANGE TO THE API: [Add `--check` flag to `dhall {lint,freeze}`](https://github.com/dhall-lang/dhall-haskell/pull/1636)
326    * You can now use the `--check` flag to verify that a file has already been
327      linted or frozen
328    * This is a breaking change to the types used by the `Dhall.Format` module
329* BREAKING CHANGE TO THE LANGUAGE: [Disallow `Natural` literals with leading zeros](https://github.com/dhall-lang/dhall-haskell/pull/1658)
330    * Now a literal like `042` is no longer valid
331    * See the [changelog for standard version 14.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v14.0.0) for more details
332* BUG FIX: [Fix parsing of `Double` literal trailing whitespace](https://github.com/dhall-lang/dhall-haskell/pull/1647)
333    * Certain expressions using `Double` literals would fail to parse, which this
334      change fixes
335* BUG FIX: [Use `DeriveLift` instead of GHC Generics to derive `Lift` ](https://github.com/dhall-lang/dhall-haskell/pull/1640)
336    * This fixes a build failure on GHC 8.10
337* [Drop support for GHC 7.10.3](https://github.com/dhall-lang/dhall-haskell/pull/1649)
338    * GHC 8.0.2 is now the earliest supported version
339* [Add support for dotted field syntax](https://github.com/dhall-lang/dhall-haskell/pull/1651)
340    * `{ x.y.z = 1 }` now legal syntax for nested fields
341    * See the [changelog for standard version 14.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v14.0.0) for more details
342* [Add support for duplicate record fields](https://github.com/dhall-lang/dhall-haskell/pull/1643)
343    * This combines with the previous feature to let you write
344      `{ x.y = 1, x.z = True }`, which is equivalent to
345      `{ x = { y = 1, z = True } }`
346    * See the [changelog for standard version 14.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v14.0.0) for more details
347* [Add `dhall lint` support for deprecating `Optional/{fold,build}`](https://github.com/dhall-lang/dhall-haskell/pull/1628)
348    * The `Optional/{fold,build}` built-ins are deprecated and can be implemented
349      in terms of other language features
350    * `Optional/fold` can be implemented in terms of `merge` (which now works on
351      `Optional` values)
352    * `Optional/build` could always be implemented using `Some`/`None`
353    * `dhall lint` now transforms the deprecated built-ins to use their
354      equivalent built-in-free versions
355* [Support Template Haskell for multiple datatypes](https://github.com/dhall-lang/dhall-haskell/pull/1664)
356    * This extends the Template Haskell support added in the previous release to
357      work for datatypes that refer to one another
358* [Add support for custom substitutions](https://github.com/dhall-lang/dhall-haskell/pull/1650)
359    * You can now add custom substitutions, which are like `let` bindings that
360      propagate to transitive imports
361* [Small formatting fixes](https://github.com/dhall-lang/dhall-haskell/pull/1652)
362
3631.29.0
364
365* [Supports version 13.0.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v13.0.0)
366* BREAKING CHANGE: [Generate Haskell datatype declarations from Dhall types](https://github.com/dhall-lang/dhall-haskell/commit/b0280826790930d18a5498fb802120478fa11767#diff-a9729dccf50be61ce3d8c68c16f0fd50)
367    * You can now use the `makeHaskellTypeFromUnion` Template Haskell utility
368      to generate a Haskell datatype declaration from a Dhall union type
369    * This helps ensure that your Haskell types and Dhall types stay in sync,
370      when you want the Dhall type to be the source of truth
371    * This is a breaking change because the default `InterpretOptions` changed
372      the default handling of singleton constructors from `Wrapped` to `Smart`
373    * You can preserve the old behavior using:
374      `autoWith defaultInterpretOptions{ singletonConstructors = Wrapped }`
375* BUG FIX: [Fix `dhall freeze --cache` and `dhall lint` to preserve `let`-related comments](https://github.com/dhall-lang/dhall-haskell/pull/1597)
376    * Now they match the behavior of `dhall format` with regard to preserving
377      these comments
378* BUG FIX: [Fix escaping of significant leading whitespace when formatting code](https://github.com/dhall-lang/dhall-haskell/pull/1598)
379    * The formatter would sometimes unnecessarily escape significant leading
380      whitespace for the final line of multiline string literals, which this
381      change fixes
382* BUG FIX: [Fix `dhall encode --json` for `Double` values](https://github.com/dhall-lang/dhall-haskell/issues/1350)
383* NEW FEATURE: [`dhall to-directory-tree` command](https://github.com/dhall-lang/dhall-haskell/pull/1606)
384    * You can now generate a directory tree from a Dhall expression
385    * Specifically:
386        * records are converted to directories
387        * `Text` fields are converted to files named after the field
388        * `Optional` values are omitted if `None`
389        * Everything else is rejected
390* NEW FEATURE: [Hexadecimal literals](https://github.com/dhall-lang/dhall-haskell/pull/1607)
391    * See the [changelog for standard version 13.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v13.0.0) for more details
392* NEW FEATURE: [`merge` works on `Optional` values](https://github.com/dhall-lang/dhall-haskell/pull/1608)
393    * See the [changelog for standard version 13.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v13.0.0) for more details
394* [Improve formatter](https://github.com/dhall-lang/dhall-haskell/pull/1609)
395    * `dhall format` will now render expressions nested inside record fields or
396      alternatives more compactly, including:
397        * Records
398        * Record completion expressions
399        * Expressions wrapped in `Some`
400        * Lists
401* [Exclude the `using ...` suffix from imports listed by `dhall resolve`](https://github.com/dhall-lang/dhall-haskell/pull/1603)
402    * Specifically when using the `--{immediate,transitive}-dependencies` flags
403
4041.28.0
405
406* [Supports version 12.0.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v12.0.0)
407* BREAKING CHANGE: [Add `Integer/{clamp,negate}` built-ins](https://github.com/dhall-lang/dhall-haskell/pull/1486)
408    * This is a technically breaking change API since this adds a new
409      constructor to the `Expr` type
410    * This is also a technically breaking change to the language.  See the [changelog for standard version 12.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v12.0.0) for more details
411* BREAKING CHANGE: [Remove support for fusion](https://github.com/dhall-lang/dhall-haskell/pull/1478)
412    * This is also a technically breaking change to the language.  See the [changelog for standard version 12.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v12.0.0) for more details
413* BREAKING CHANGE: [Parse whitespace more precisely](https://github.com/dhall-lang/dhall-haskell/pull/1483)
414    * The Haskell implementation now matches the official grammar much more
415      closely, but as a result will now reject some programs that it used to
416      accept
417    * For example, `1:Natural` used to be valid and now is no longer valid as
418      the standard requires mandatory whitespace after the `:`
419    * Consult the [standard grammar](https://github.com/dhall-lang/dhall-lang/blob/master/standard/dhall.abnf) if you run into a new parsing error as a result of this change
420    * This is also a parsing performance regression (specifically for parsing
421      comments), but should not be noticeable in practice.  See [#1512](https://github.com/dhall-lang/dhall-haskell/pull/1512) for more details
422* BREAKING CHANGE: Rename `Type` to `Decoder` and `InputType` to `Encoder` [#1483](https://github.com/dhall-lang/dhall-haskell/pull/1485) / [#1489](https://github.com/dhall-lang/dhall-haskell/pull/1489)
423* BUG FIX: [Fix `dhall format --check`](https://github.com/dhall-lang/dhall-haskell/pull/1462)
424    * Before this change `dhall format --check` would fail due to attempting to
425      read all of standard input in twice
426* BUG FIX: [Fix `dhall freeze` to always re-freeze an import](https://github.com/dhall-lang/dhall-haskell/pull/1471)
427    * Before this fix, `dhall freeze` would not attempt to refreeze an already
428      frozen import
429* [Permit spaces around completion operator](https://github.com/dhall-lang/dhall-haskell/pull/1532)
430    * See the [changelog for standard version 12.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v12.0.0) for more details
431* [Make `missing` referentially transparent](https://github.com/dhall-lang/dhall-haskell/pull/1509)
432    * `missing` can now be imported transitively via a remote import
433    * Normally resolving `missing` would still still fail, except for
434      `missing as Location`, which is now a valid transitive import
435    * See the [changelog for standard version 12.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v12.0.0) for more details
436* [Write cache files atomically](https://github.com/dhall-lang/dhall-haskell/pull/1544)
437    * This is a resilience improvement so that the cache is not left in a
438      corrupt state in the event of a power outage or exhausting disk/memory
439* [New `Dhall.function` utility](https://github.com/dhall-lang/dhall-haskell/pull/1507)
440    * This is provides the same functionality as the `Interpret` instance for
441      `(->)`, except without the use of typeclasses
442* [New `dhall haskell-syntax-tree` command](https://github.com/dhall-lang/dhall-haskell/pull/1553)
443    * This command displays the Haskell syntax tree of an expression
444      (primarily for debugging purposes)
445    * Note that this is highly-volatile and subject to change, so don't depend
446      on this programmatically.  We may break the output of this command without
447      any notice.
448* [Add `instance Show Ann`](https://github.com/dhall-lang/dhall-haskell/pull/1567)
449* [Move normalization code from `Dhall.Core` to `Dhall.Normalize`](https://github.com/dhall-lang/dhall-haskell/pull/1452)
450    * Note that this is not a breaking change.  The relocated utilities are
451      still re-exported from `Dhall.Core`
452* [Fix `dhall resolve --transitive-dependencies` to list dependencies in "post-order"](https://github.com/dhall-lang/dhall-haskell/pull/1539)
453* Performance improvements
454    * [#1500](https://github.com/dhall-lang/dhall-haskell/pull/1500)
455    * [#1522](https://github.com/dhall-lang/dhall-haskell/pull/1522)
456    * [#1568](https://github.com/dhall-lang/dhall-haskell/pull/1568)
457    * [#1580](https://github.com/dhall-lang/dhall-haskell/pull/1578)
458* Fixes and improvements to code formatting
459    * [#1460](https://github.com/dhall-lang/dhall-haskell/pull/1460)
460    * [#1466](https://github.com/dhall-lang/dhall-haskell/pull/1466)
461    * [#1508](https://github.com/dhall-lang/dhall-haskell/pull/1508)
462    * [#1527](https://github.com/dhall-lang/dhall-haskell/pull/1527)
463    * [#1422](https://github.com/dhall-lang/dhall-haskell/pull/1422)
464    * [#1552](https://github.com/dhall-lang/dhall-haskell/pull/1552)
465    * [#1543](https://github.com/dhall-lang/dhall-haskell/pull/1543)
466    * [#1554](https://github.com/dhall-lang/dhall-haskell/pull/1554)
467    * [#1569](https://github.com/dhall-lang/dhall-haskell/pull/1569)
468* Fixes and improvements to code linting
469    * [#1518](https://github.com/dhall-lang/dhall-haskell/pull/1518)
470    * [#1531](https://github.com/dhall-lang/dhall-haskell/pull/1531)
471* Fixes and improvements to error messages
472    * [#1443](https://github.com/dhall-lang/dhall-haskell/pull/1443)
473    * [#1448](https://github.com/dhall-lang/dhall-haskell/pull/1448)
474    * [#1482](https://github.com/dhall-lang/dhall-haskell/pull/1482)
475    * [#1519](https://github.com/dhall-lang/dhall-haskell/pull/1519)
476    * [#1556](https://github.com/dhall-lang/dhall-haskell/pull/1556)
477    * [#1528](https://github.com/dhall-lang/dhall-haskell/pull/1528)
478* Fixes and improvements to the parser
479    * [#1473](https://github.com/dhall-lang/dhall-haskell/pull/1473)
480    * [#1549](https://github.com/dhall-lang/dhall-haskell/pull/1549)
481    * [#1563](https://github.com/dhall-lang/dhall-haskell/pull/1563)
482    * [#1584](https://github.com/dhall-lang/dhall-haskell/pull/1584)
483* Fixes and improvements to diffs
484    * [#1585](https://github.com/dhall-lang/dhall-haskell/pull/1585)
485* Fixes and improvements to the REPL
486    * [#1573](https://github.com/dhall-lang/dhall-haskell/pull/1573)
487* Fixes and improvements to documentation
488    * [#1530](https://github.com/dhall-lang/dhall-haskell/pull/1530)
489
4901.27.0
491
492* [Supports version 11.0.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v11.0.0)
493* BREAKING CHANGE: Rename `Inject`/`Interpret` to `ToDhall`/`FromDhall`
494    * This change `ConstraintKinds` to minimize disruption by keeping around
495      `Inject`/`Interpret` as synonyms for `ToDhall`/`FromDhall`
496    * In other words, constraints and derived instances using `Inject` or
497      `Interpret` will still work
498    * However, manual instances using `Inject` or `Interpret` won't work
499      unless you rename them to `ToDhall`/`FromDhall` or enable the
500      `TypeSynonymInstances` extension
501* BREAKING CHANGE: Fix `Eq` instance for `Expr`s with special `Double`s
502    * This fixes the `Eq` instance for `Expr`s to match the standard regarding
503      `Double` comparisons
504    * Specifically: `NaN == NaN` and `-0.0 /= 0.0`
505    * This is a breaking change because the `DoubleLit` constructor of `Expr`
506      now stores a `DhallDouble` instead of a `Double`
507* BREAKING CHANGE: [Add `--file` option for `dhall hash`](https://github.com/dhall-lang/dhall-haskell/pull/1445)
508    * This is a breaking change because it also removes the `Dhall.Hash` module,
509      which wasn't really carrying its own weight
510* [Add support for leading separators](https://github.com/dhall-lang/dhall-haskell/pull/1355)
511    * See the [changelog for standard version 11.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v11.0.0) for more details
512* [Add record completion operator](https://github.com/dhall-lang/dhall-haskell/pull/1375)
513    * See the [changelog for standard version 11.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v11.0.0) for more details
514* [Add `dhall tags` subcommand](https://github.com/dhall-lang/dhall-haskell/pull/1398)
515    * This generates an ETags file from an input file or directory
516* [Add `dhall lint` support for fixing malformed assertions](https://github.com/dhall-lang/dhall-haskell/pull/1353)
517    * `dhall lint` now fixes `let example = foo === bar` to be
518       `let example = assert : foo === bar`
519* Normalize inferred types [#1337](https://github.com/dhall-lang/dhall-haskell/pull/1337)
520* New `FromDhall`/`ToDhall` (previously `Interpret`/`Inject`) instances for:
521    * [`Void`](https://github.com/dhall-lang/dhall-haskell/pull/1382)
522    * `Map` [#1391](https://github.com/dhall-lang/dhall-haskell/pull/1391) / [#1412](https://github.com/dhall-lang/dhall-haskell/pull/1412)
523    * [`HashMap`](https://github.com/dhall-lang/dhall-haskell/pull/1426)
524    * [`Set` and `HashSet`](https://github.com/dhall-lang/dhall-haskell/pull/1405)
525    * [`()`](https://github.com/dhall-lang/dhall-haskell/pull/1388)
526* [Add `--output` option to `dhall`](https://github.com/dhall-lang/dhall-haskell/pull/1399)
527* [Move syntax things from `Dhall.Core` to a new `Dhall.Syntax` module](https://github.com/dhall-lang/dhall-haskell/pull/1440)
528    * This is not a breaking change.  `Dhall.Core` still re-exports the same
529      API as before
530* Performance improvements
531    * [#1362](https://github.com/dhall-lang/dhall-haskell/pull/1362)
532    * [#1366](https://github.com/dhall-lang/dhall-haskell/pull/1366)
533    * [#1368](https://github.com/dhall-lang/dhall-haskell/pull/1368)
534    * [#1397](https://github.com/dhall-lang/dhall-haskell/pull/1397)
535    * [#1401](https://github.com/dhall-lang/dhall-haskell/pull/1401)
536* Fixes and improvements to code formatting
537    * [#1360](https://github.com/dhall-lang/dhall-haskell/pull/1360)
538    * [#1372](https://github.com/dhall-lang/dhall-haskell/pull/1372)
539    * [#1380](https://github.com/dhall-lang/dhall-haskell/pull/1380)
540    * [#1415](https://github.com/dhall-lang/dhall-haskell/pull/1415)
541
5421.26.1
543
544* TECHNICALLY BREAKING CHANGES: [Simplify `⫽` within projection](https://github.com/dhall-lang/dhall-haskell/pull/1283) / [Simplify nested record projections](https://github.com/dhall-lang/dhall-haskell/pull/1307)
545    * These are technically breaking changes because you will need to update
546      integrity checks that protect code simplified in this way
547    * We're not bumping the major version since the likelihood that you're
548      affected is quite low
549* BUG FIX: [Fix performance regression](https://github.com/dhall-lang/dhall-haskell/pull/1335)
550    * This change fixes the performance regression introduced in the previous
551      release (version 1.26.0)
552* BUG FIX: [Prevent REPL from inserting inferred `Sort`s into context](https://github.com/dhall-lang/dhall-haskell/pull/1318)
553    * This protects the REPL from getting hosed if you define an expression
554      using `:let` that has an inferred type of `Sort`
555* NEW FEATURE: Improved `Inject`/`Interpret` support for 1-field constructors - ([#1315](https://github.com/dhall-lang/dhall-haskell/pull/1315) / [#1321](https://github.com/dhall-lang/dhall-haskell/pull/1321))
556    * This adds a new `singletonConstructors` field to `InterpretOptions` that
557      lets you control what Dhall type 1-field Haskell constructors correspond
558      to
559    * The default (`Wrapped`) is backwards compatible with the old behavior
560    * The `Smart` option is probably what you want: it will strip the
561      Haskell constructor from the Dhall type if the constructor has one
562      anonymous field
563    * The `Bare` option always strips 1-field Haskell constructors from the
564      Dhall type
565* NEW FEATURE: `--censor` flag that disables source code display ([#1312](https://github.com/dhall-lang/dhall-haskell/pull/1312) / [#1329](https://github.com/dhall-lang/dhall-haskell/pull/1329))
566    * Use this flag when you don't want sensitive `Text` literals showing up in
567      parsing or type-checking error messages
568* [Format record fields more compactly if they fit on 1 line](https://github.com/dhall-lang/dhall-haskell/pull/1314)
569    * The formatter will now format record fields on a field-by-field basis to
570      avoid unnecessary vertical sprawl of formatted records
571    * Specifically, record fields that fit on one line will now be formatted
572      on one line
573* [Add `--quiet` option to `dhall type`](https://github.com/dhall-lang/dhall-haskell/pull/1325)
574    * This lets you use `dhall type` in "check only" mode (e.g. for CI for
575      for development feedback)
576* Improved GHCJS support - ([#1311](https://github.com/dhall-lang/dhall-haskell/pull/1311) / [#1330](https://github.com/dhall-lang/dhall-haskell/pull/1330))
577* [Fix all executables to accept `--version`](https://github.com/dhall-lang/dhall-haskell/pull/1334)
578    * Note that the `dhall version` subcommand is still supported, too
579* [New `Dhall.Version` module](https://github.com/dhall-lang/dhall-haskell/pull/1332)
580* [Don't normalize inferred types](https://github.com/dhall-lang/dhall-haskell/pull/1317)
581    * This fixes `dhall type` to more accurately follow the standard
582* [Initial changes for GHC 8.8 support](https://github.com/dhall-lang/dhall-haskell/pull/1324)
583* [Fix Haddock formatting for `dhallFromJSON`](https://github.com/dhall-lang/dhall-haskell/pull/1316)
584* [Improved Windows caching support](https://github.com/dhall-lang/dhall-haskell/pull/1272)
585    * `dhall` will now prefer the `%LOCALAPPDATA%` directory for caching if it is
586      available
587* [Warn about missing cache directories](https://github.com/dhall-lang/dhall-haskell/pull/1320)
588
5891.26.0
590
591* [Supports version 10.0.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v10.0.0)
592* BREAKING CHANGE TO THE LANGUAGE: [Remove old union literal syntax](https://github.com/dhall-lang/dhall-haskell/pull/1176)
593    * Union literals of the form `< x = e | ... >` are no longer valid
594    * For more details, see: [Migration: Deprecation of old union literal syntax](https://github.com/dhall-lang/dhall-lang/wiki/Migration%3A-Deprecation-of-old-union-literal-syntax)
595    * Also see the [changelog for standard version 10.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v10.0.0) for more details
596* BREAKING CHANGE TO THE API: [Change `X` to be a type synonym for `Data.Void`](https://github.com/dhall-lang/dhall-haskell/pull/1172)
597    * This is a breaking change if you were previously pattern matching on the
598      `X` constructor.  You can replace that with the use of `Data.Void.absurd`
599* BREAKING CHANGE TO THE API: [Treat multi-`let`s as syntactic sugar](https://github.com/dhall-lang/dhall-haskell/pull/1242)
600    * This is a breaking change because the `Let` constructor now only stores
601      one `Binding` instead of a `NonEmpty` list of `Binding`s
602* PERFORMANCE REGRESSION & TECHNICALLY BREAKING CHANGE TO THE LANGUAGE: [Dependent types](https://github.com/dhall-lang/dhall-haskell/pull/1164)
603    * You can now write functions from terms to types
604    * There is also now language support for tests of the form
605      `assert : x === y`
606    * This deteriorates the performance of large multi-`let` expressions
607      (See: [#1306](https://github.com/dhall-lang/dhall-haskell/issues/1306))
608    * Splitting large multi-`let` expressions into smaller files may mitigate
609      the problem as a work-around for now
610    * Follow [#1129](https://github.com/dhall-lang/dhall-haskell/issues/1129)
611      for work to fix this performance regression
612    * This is also a technically breaking change because `assert` is now a
613      reserved keyword
614    * See the [changelog for standard version 10.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v10.0.0) for more details
615* TECHNICALLY BREAKING CHANGE TO THE LANGUAGE: [Add `Natural/subtract` built-in](https://github.com/dhall-lang/dhall-haskell/pull/1133)
616    * The language now supports machine subtraction, which can be used to
617      support several other high-performance operations (like `Natural`
618      comparisons)
619    * This is a technically breaking change if you used `Natural/subtract` as an
620      identifier in your code
621    * See the [changelog for standard version 10.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v10.0.0) for more details
622* TECHNICALLY BREAKING CHANGE TO THE LANGUAGE: [More simplifications for field selection](https://github.com/dhall-lang/dhall-haskell/pull/1174)
623    * Now the interpreter will more intelligently simplify certain field
624      projections
625    * For example: `λ(x : { a : Bool, b : Bool }) → (x ⫽ { c = 0 }).{ a, c }.c`
626      will now simplify to `λ(x : { a : Bool, b : Bool }) → 0 `
627    * This is a technically breaking change because you will need to update
628      integrity checks that protect code simplified in this way
629    * See the [changelog for standard version 10.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v10.0.0) for more details
630* TECHNICALLY BREAKING CHANGE TO THE LANGUAGE: [Simplify `⫽` when its arguments are equivalent](https://github.com/dhall-lang/dhall-haskell/pull/1196)
631    * This is a technically breaking change for the same reason: this will
632      perturb semantic integrity checks for affected code
633    * See the [changelog for standard version 10.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v10.0.0) for more details
634* NEW FEATURE: [Restore support for records containing both types and terms](https://github.com/dhall-lang/dhall-haskell/pull/1173)
635    * In other words `{ foo = 1, bar = Bool }` is now valid again
636    * This means that you now can export a single package containing both types
637      and terms
638    * See the [changelog for standard version 10.0.0](https://github.com/dhall-lang/dhall-lang/releases/tag/v10.0.0) for more details
639* [`dhall format` now preserves `let` comments](https://github.com/dhall-lang/dhall-haskell/pull/1273)
640    * `dhall` format will now preserve comments in the following locations of
641      a `let` binding:
642    * `let {- HERE -} x {- HERE -} : {- HERE -} Bool = {- HERE -} True in x`
643    * This support handles both single-line and multi-line comments and also
644      takes care of correctly indenting/dedenting them
645    * Note that comments before the `let` keyword are still not preserved
646      (unless it is the beginning of the file)
647* [Add API support for marshalling recursive types](https://github.com/dhall-lang/dhall-haskell/pull/1195)
648    * You can now marshal recursive types from Dhall into Haskell using the
649      newly-added utilities
650    * See also: [#1298](https://github.com/dhall-lang/dhall-haskell/pull/1298)
651* [New `:help` command for `dhall repl`](https://github.com/dhall-lang/dhall-haskell/pull/1237)
652* New `--no-cache` flag [#1290](https://github.com/dhall-lang/dhall-haskell/pull/1290) / [#1434](https://github.com/dhall-lang/dhall-haskell/pull/1434) / [#1436](https://github.com/dhall-lang/dhall-haskell/pull/1436)
653    * You can now disable use of the cache with this flag
654    * This comes in handy if you want to disable α-normalization for imports
655      protected by a semantic integrity check
656* Bug fixes
657    * [Fix `isNormalized` for field selections](https://github.com/dhall-lang/dhall-haskell/pull/1210)
658    * [Simplify `Natural/subtract` when its arguments are equivalent](https://github.com/dhall-lang/dhall-haskell/pull/1220)
659    * [Fix `NaN` to be judgmentally equivalent to itself](https://github.com/dhall-lang/dhall-haskell/pull/1231)
660    * [Fix `Inject` instance for lists](https://github.com/dhall-lang/dhall-haskell/pull/1261)
661    * [Fix typechecking of `toMap`](https://github.com/dhall-lang/dhall-haskell/pull/1279)
662* Performance optimizations
663    * [Optimize a few `Set` instances](https://github.com/dhall-lang/dhall-haskell/pull/1184)
664    * [Remove some redundant sorting during normalization](https://github.com/dhall-lang/dhall-haskell/pull/1228)
665* Improvements to error messages
666    * [Improve error reporting for failed remote imports](https://github.com/dhall-lang/dhall-haskell/pull/1188)
667    * [Improve HTTP errors](https://github.com/dhall-lang/dhall-haskell/pull/1253)
668* Improvements to formatting
669    * [Indent function arguments when formatting](https://github.com/dhall-lang/dhall-haskell/pull/1167)
670    * [Prefer unquoted URLs](https://github.com/dhall-lang/dhall-haskell/pull/1235)
671    * [Strip leading whitespace](https://github.com/dhall-lang/dhall-haskell/pull/1270)
672* Improvements to diffs
673    * [Fix diffs for lists](https://github.com/dhall-lang/dhall-haskell/pull/1213)
674    * [Improve diff for non-empty lists](https://github.com/dhall-lang/dhall-haskell/pull/1244)
675    * [Small fixes to `dhall diff`](https://github.com/dhall-lang/dhall-haskell/pull/1263)
676* Improvements to documentation
677    * [Fix documentation for `UnionInputType`](https://github.com/dhall-lang/dhall-haskell/pull/1230)
678    * [Document support for caching protected imports](https://github.com/dhall-lang/dhall-haskell/pull/1247)
679* Improvements to command-line interface
680    * [Improve description of `dhall lint`](https://github.com/dhall-lang/dhall-haskell/pull/1264)
681    * [Change `dhall type` to resolve imports](https://github.com/dhall-lang/dhall-haskell/pull/1281)
682
6831.25.0
684
685* Supports version 9.0.0 of the standard
686    * See: https://github.com/dhall-lang/dhall-lang/releases/tag/v9.0.0
687* BREAKING CHANGE: Remove support for old-style `List`-like `Optional` literals
688    * List-like `Optional` Literals (i.e. `[ 1 ] : Optional Natural`) are no
689      longer valid
690    * See: https://github.com/dhall-lang/dhall-haskell/pull/1002
691* BREAKING CHANGE: Add support for semi-semantic caching
692    * This change significantly improves the performance of imports
693    * This change also automatically caches imports without an integrity check
694    * This changes several types in `Dhall.Import` to support this new
695      feature
696    * See: https://github.com/dhall-lang/dhall-haskell/pull/1113
697* BREAKING CHANGE: Implement new Unicode braced escape sequence
698    * Escape sequences encoding surrogate pairs are no longer valid
699    * Instead, characters previously encoded as surrogate pairs can instead be
700      encoded as a braced sequence
701    * For example: "\uD834\uDD1E" must now be written as "\u{1D11E}"
702    * See: https://github.com/dhall-lang/dhall-haskell/pull/987
703    * See: https://github.com/dhall-lang/dhall-haskell/pull/1104
704* BREAKING CHANGE: Make the type of extract richer:
705    * `Dhall.extract` can now return a detailed error instead of just a `Maybe`
706    * This is a breaking chnage because the type of `extract` changed
707    * See: https://github.com/dhall-lang/dhall-haskell/pull/1011
708* BREAKING CHANGE: Add support for importing expressions `as Location`
709    * This is a breaking change because a new `Location` constructor was added
710      to `ImportMode`
711    * See: https://github.com/dhall-lang/dhall-haskell/pull/1019
712* BREAKING CHANGE: Switch `Var` to use an `Int`
713    * This is a performance improvement, but also a breaking change since the
714      `Integer` in the `Var` constructor was changed to an `Int`
715    * See: https://github.com/dhall-lang/dhall-haskell/pull/1044
716* BREAKING CHANGE: Add new `toMap` keyword
717    * This is a breaking change to the API because a new `ToMap` constructor
718      was added to the `Expr` type
719    * This is also a technically breaking change to the language because `toMap`
720      is now a reserved keyword, although most code should be unaffected in
721      practice
722    * See: https://github.com/dhall-lang/dhall-haskell/pull/1041
723* BREAKING CHANGE: Sort the fields of a record projection during normalization
724    * This is a technically breaking change to the language because any
725      expressions with an uninterpreted record projection will have a different
726      semantic integrity check.  However, most could should be unaffected in
727      practice
728    * See: https://github.com/dhall-lang/dhall-haskell/pull/1111
729* BUG FIX: Fix substitution into record projection by type
730    * An expression like this one was being incorrectly rejected:
731      `let e = { a = 10, b = "Text" } let s = { a : Natural } in e.(s)`, which
732      this change fixes
733    * See: https://github.com/dhall-lang/dhall-haskell/pull/1012
734* BUG FIX: Reject record projection when there is a field type mismatch
735    * Record projection by type was previously not checking the expected
736      field types, which this change fixes
737    * See: https://github.com/dhall-lang/dhall-haskell/pull/1027
738* BUG FIX: Fix linting of unused let bindings
739    * Certain let bindings were not correctly detected as unused, which this
740      change fixes
741    * See: https://github.com/dhall-lang/dhall-haskell/pull/1001
742* BUG FIX: Fix `--file` option
743    * The `--file` option from the previous release did not work, due to not
744      computing relative paths correctly, which this change fixes
745    * See: https://github.com/dhall-lang/dhall-haskell/pull/1004
746* BUG FIX: Minor fix to `dhall diff`
747    * `dhall diff` was incorrectly displaying spurious differences for
748      identical lists that were function arguments, which this change fixes
749    * See: https://github.com/dhall-lang/dhall-haskell/pull/1006
750* BUG FIX: Allow `Sort` as type annotation
751    * This should have been implemented in the previous release as part of
752      supporting version 8.0.0 of the standard, but was missed
753    * See: https://github.com/dhall-lang/dhall-haskell/pull/1024
754* BUG FIX: `Dhall.Map`: Reflect original key ordering in `Ord` instance
755    * `Dhall.Map` now considers key order when comparing `Map`s, which it should
756      have done before, but didn't
757    * See: https://github.com/dhall-lang/dhall-haskell/pull/1050
758* BUG FIX: Consistently format multi-line strings
759    * The formatter now formats naked multi-line strings the same as nested
760      multi-line strings
761    * Specifically, naked multi-line strings can now be formatted on a single
762      (just like nested multi-line strings)
763    * See: https://github.com/dhall-lang/dhall-haskell/pull/1056
764* BUG FIX: Make `isNormalized` consistent with `normalize`
765    * See: https://github.com/dhall-lang/dhall-haskell/pull/1115
766* BUG FIX: Make `normalizeWithM` consistent with `normalize`
767    * See: https://github.com/dhall-lang/dhall-haskell/pull/1126
768* BUG FIX: Fix import alternatives to recover from type errors
769    * See: https://github.com/dhall-lang/dhall-haskell/pull/1152
770* Feature: Semi-semantic caching
771    * The Haskell implementation now implicitly caches *all* local imports, not
772      just imports frozen by integrity checks, so that you don't have to freeze
773      them when doing local development
774    * These cached imports are still correctly invalidated if they or any of
775      their dependencies change
776    * This new implicit cache is stored underneath `~/.cache/dhall-haskell` by
777      default
778    * See: https://github.com/dhall-lang/dhall-haskell/pull/1154
779* Feature: New `dhall text` subcommand
780    * This new subcommand supersedes the old `dhall-to-text` executable
781* Feature: Add `instance Lift (Expr s a)`
782    * See: https://github.com/dhall-lang/dhall-haskell/pull/1119
783* Fixes and improvements to error messages:
784    * See: https://github.com/dhall-lang/dhall-haskell/pull/1030
785    * See: https://github.com/dhall-lang/dhall-haskell/pull/1137
786* Fixes and improvements to tests:
787    * See: https://github.com/dhall-lang/dhall-haskell/pull/1155
788    * See: https://github.com/dhall-lang/dhall-haskell/pull/1159
789* Performance improvements
790    * See: https://github.com/dhall-lang/dhall-haskell/pull/1036
791    * See: https://github.com/dhall-lang/dhall-haskell/pull/1051
792    * See: https://github.com/dhall-lang/dhall-haskell/pull/1048
793    * See: https://github.com/dhall-lang/dhall-haskell/pull/1057
794    * See: https://github.com/dhall-lang/dhall-haskell/pull/1065
795    * See: https://github.com/dhall-lang/dhall-haskell/pull/1066
796    * See: https://github.com/dhall-lang/dhall-haskell/pull/1085
797
7981.24.0
799
800* Supports version 8.0.0 of the standard
801    * See: https://github.com/dhall-lang/dhall-lang/releases/tag/v8.0.0
802* BREAKING CHANGE: Allow tabs and blank lines in multi-line strings
803    * Blank lines are now ignored for the purpose of dedenting multiline strings
804    * Lines with leading tabs (or mixed tabs and spaces) are now dedented, too,
805      so long as they all share the same prefix
806    * This is technically a breaking change, but unlikely to affect programs
807      in practice, especially if they were formatted with `dhall format`.  This
808      change mainly affects programs that were not indented correctly.
809    * See the changelog for standard version 8.0.0 for more details
810* BREAKING CHANGE: Simplify bare interpolations
811    * Expressions like `λ(x : Text) → "${x}"` now simplify to `λ(x : Text) → x`
812    * This is a technically breaking change because it changes how these sorts
813      of expressions are serialized.  This does not affect semantic integrity
814      checks and the new simplified expressions are extensionally equivalent to
815      their older counterpart expressions.
816    * See the changelog for standard version 8.0.0 for more details
817* BREAKING CHANGE: Encode integrity check as multihash
818    * Semantic integrity checks are now encoded using the multihash spec
819    * This is a technically breaking change that does not perturb the hash for
820      user-facing semantic integrity checks.  This only affects how expressions
821      with unresolved imports are serialized, but semantic integrity checks are
822      only computed for fully-resolved imports.
823    * See the changelog for standard version 8.0.0 for more details
824* BUG FIX: Fix type-checker to reject invalid record type annotations
825    * e.g. `{ x = 1 } : { x : Text }` was not properly rejected by the type
826      checker
827    * See: https://github.com/dhall-lang/dhall-haskell/pull/965
828* BUG FIX: Custom header forwarding fixed
829    * Forwarding custom headers could previously fail in various ways, such as:
830        * Cyclic imports leading to endless network requests
831        * Resolving a non-existent import for the custom headers
832        * Resolving an existing but incorrect import for the custom headers
833    * This change fixes that by forwarding custom headers by value instead of
834      by reference
835    * See: https://github.com/dhall-lang/dhall-haskell/pull/967
836* BUG FIX: Fix GHCJS support
837    * `Natural/fold` was broken in version 1.22, which this change fixes
838    * Specifically, it would hang for `Natural` numbers greater than 1
839    * See: https://github.com/dhall-lang/dhall-haskell/pull/985
840* BUG FIX: `dhall diff` no longer double-prints key-value separators
841    * See: https://github.com/dhall-lang/dhall-haskell/pull/952
842* Feature: Record projection by expression
843    * You can now project out a subset of record fields by the expected type
844    * `let t = { x : Natural } let p = { x = 1, y = 2 } in p.(t) = { x = 1 }`
845    * See the changelog for standard version 8.0.0 for more details
846* Feature: Inline headers
847    * You no longer need to specify custom headers in a separate import.  You
848      can now specify them inline within the same file.
849    * e.g.: `https://example.com/x using [ { header = "Foo", value = "Bar" } ]`
850    * See the changelog for standard version 8.0.0 for more details
851* Feature: Allow `Sort` as a type annotation
852    * An expression such as `Kind → Kind : Sort` will now type-check
853    * `Sort` is still disallowed outside of a type annotation
854    * See the changelog for standard version 8.0.0 for more details
855* Feature: Allow self-describe-cbor when decoding
856    * Dhall expressions serialized as CBOR can be tagged to describe themselves
857      as CBOR without affecting decoding
858    * See the changelog for standard version 8.0.0 for more details
859* Feature: New `--file` option for `dhall` commands
860    * In other words, instead of `dhall <<< './some/file` you can now use
861      `dhall --file some/file`
862    * See: https://github.com/dhall-lang/dhall-haskell/pull/949
863* Feature: New `--cache` flag for `dhall freeze` command
864    * This automates the idiom used by the Prelude to optimistically cache
865      imports but gracefully degrade if the semantic integrity check fails
866    * See: https://github.com/dhall-lang/dhall-haskell/pull/980
867* Feature: Add `:clear` command to `dhall repl`
868    * This deletes previous bindings from the history so that they can be
869      garbage collected
870    * See: https://github.com/dhall-lang/dhall-haskell/pull/966
871* Feature: New `chunkExprs` `Traversal` added to `Dhall.Core`
872    * See: https://github.com/dhall-lang/dhall-haskell/pull/954
873* Feature: New `Dhall.Optics` module
874    * This re-exports some convenient @lens@ utilities used internally for
875      packages trying to avoid a @lens@ dependency
876    * See: https://github.com/dhall-lang/dhall-haskell/pull/986
877* More GHC 8.8 support
878    * See: https://github.com/dhall-lang/dhall-haskell/pull/961
879
8801.23.0
881
882* BREAKING CHANGE: Fix marshaling union literals
883    * 1.22.0 introduced two separate bugs in marshaling union literals between
884      Dhall and Haskell, which this release fixes:
885        * Dhall enums did not correctly map onto Haskell enums
886        * New-style union literals (i.e. `< A : T >.A x`) were not correctly
887          supported
888    * See: https://github.com/dhall-lang/dhall-haskell/pull/918
889    * See: https://github.com/dhall-lang/dhall-haskell/pull/927
890    * See: https://github.com/dhall-lang/dhall-haskell/pull/936
891* BUG FIX: Fix α-normalization
892    * Version 1.22.0 introduced a new faster evaluation algorithm, but the new
893      algorithm introduced two α-normalization regression, which this release
894      fixes
895    * The primary effect of this bug was that semantic integrity checks would
896      fail for expressions that contain an `if`/`then`/else` expression in their
897      normal form
898    * See: https://github.com/dhall-lang/dhall-haskell/pull/931
899    * See: https://github.com/dhall-lang/dhall-haskell/pull/938
900* BUG FIX: Fix merging of sort-level record types
901    * The language standard requires that `{ a : Kind } ⩓ { b : Kind }` is
902      valid, which this change fixes
903    * See: https://github.com/dhall-lang/dhall-haskell/pull/891
904* BUG FIX: `dhall freeze` respects the `--ascii` flag
905    * See: https://github.com/dhall-lang/dhall-haskell/pull/934
906* BUG FIX: Don't autocomplete fields for record types
907    * This prevents the REPL from expanding `{ x : T }.<TAB>` to `{ x : T }.x`
908    * See: https://github.com/dhall-lang/dhall-haskell/pull/937
909* Support `MonadFail`-related changes in GHC 8.8
910    * See: https://github.com/dhall-lang/dhall-haskell/pull/912
911* Add `cross` flag to simplify cross-compilation
912    * This allows the `dhall` package to be built without using
913      `TemplateHaskell`
914    * See: https://github.com/dhall-lang/dhall-haskell/pull/928
915* Increase lines of context for error messages
916    * Error messages now provide at least 20 lines of context instead of 3
917      before truncating large expressions
918    * See: https://github.com/dhall-lang/dhall-haskell/pull/916
919* Add line numbers to error messages
920    * The bottom of every Dhall type error includes the original source code,
921      which now has line numbers on the left margin
922    * See: https://github.com/dhall-lang/dhall-haskell/pull/919
923* Expand lower bounds on `megaparsec`/`transformers-compat` dependencies
924    * This is to support `dhall` on Debian Sid
925    * See: https://github.com/dhall-lang/dhall-haskell/pull/939
926
9271.22.0
928
929* Supports version 7.0.0 of the standard
930    * See: https://github.com/dhall-lang/dhall-lang/releases/tag/v7.0.0
931* BREAKING CHANGE: Add support for empty alternatives
932    * The `Union` type now has an optional (`Maybe`) type for each alternative
933    * See the changelog for standard version 7.0.0 for more details
934    * See: https://github.com/dhall-lang/dhall-haskell/pull/863
935* BREAKING CHANGE: Remove support for URL fragments
936    * The `URL` type no longer has a field for a URL fragment since the language
937      no longer supports fragments
938    * See the changelog for standard version 7.0.0 for more details
939    * See: https://github.com/dhall-lang/dhall-haskell/pull/851
940* BREAKING CHANGE: Remove deprecated `Path` type synonym
941    * See: https://github.com/dhall-lang/dhall-haskell/pull/858
942* BUG FIX: Correctly parse identifiers beginning with `http`
943    * i.e. `httpPort` was supposed to be a valid identifier name and now is
944    * See: https://github.com/dhall-lang/dhall-haskell/pull/870
945* BUG FIX: Fix `dhall encode` bug
946    * `dhall encode` bug was generating binary expressions that were valid
947      (i.e. they would decode correctly) but were non-standard (i.e. hashing
948      them would not match the hash you would normally get from a semantic
949      integrity check)
950    * Semantic integrity checks were not affected by this bug since they used
951      a slightly different code path that generated the correct binary input to
952      the hash.  Only the `dhall decode` subcommand was affected
953    * See: https://github.com/dhall-lang/dhall-haskell/pull/859
954* BUG FIX: Fix for `Dhall.UnionType`
955    * This fixes some expressions that would previously fail to marshal into
956      Haskell, specifically those were the marshalling logic was built using
957      the `UnionType` utilities
958    * See: https://github.com/dhall-lang/dhall-haskell/pull/857
959* Feature: New `--alpha` flag to α-normalize command-line output
960    * See: https://github.com/dhall-lang/dhall-haskell/pull/855
961* Performance improvements
962    * The normalizer is now *much* faster
963    * See: https://github.com/dhall-lang/dhall-haskell/pull/876
964
9651.21.0
966
967* Supports version 6.0.0 of the language standard
968    * See: https://github.com/dhall-lang/dhall-lang/releases/tag/v6.0.0
969* BREAKING CHANGE: Remove the `constructors` keyword
970    * ... as standardized in version 6.0.0 of the language standard
971    * The deprecation cycle is over, so the keyword is no longer supported
972    * For more details, see: https://github.com/dhall-lang/dhall-lang/wiki/Migration%3A-Deprecation-of-constructors-keyword
973    * See: https://github.com/dhall-lang/dhall-haskell/pull/829
974* BREAKING CHANGE: CBOR-encode only special `Double`s as half-floats
975    * ... as standardized in version 6.0.0 of the language standard
976    * CBOR `Double`s except `Infinity`/`-Infinity`/`NaN`/`0.0` are now encoded in at
977      least 32 bits
978    * See: https://github.com/dhall-lang/dhall-haskell/pull/822
979* BREAKING CHANGE: Sort record and union fields when CBOR-encoding
980    * Fields and alternatives are now sorted when serialized
981    * This does not affect semantic integrity checks, which already sorted these
982      fields/alternatives before hashing expressions
983    * This does affect the serialization of expressions that have not been
984      normalized (e.g. uninterpreted expressions transmitted over the wire)
985    * See: https://github.com/dhall-lang/dhall-haskell/pull/835
986* BUG FIX: Fix non-exhaustive pattern match in `dhall lint`
987    * This fixes: `Irrefutable pattern failed for pattern Let (l' :| ls') d'`
988    * This bug would cause `dhall lint` to fail on some nested `let`/`in`
989      expressions
990    * See: https://github.com/dhall-lang/dhall-haskell/pull/780
991    * See: https://github.com/dhall-lang/dhall-haskell/pull/784
992* BUG FIX: Don't fail if `$HOME` environment variable is unset
993    * The interpreter was incorrectly throwing an exception if `HOME` was unset
994    * The standard requires that implementations should handle the `HOME`
995      environment variable being missing
996    * See: https://github.com/dhall-lang/dhall-haskell/pull/789
997* Feature: Remove version tag from semantic integrity check
998    * ... as standardized in version 6.0.0 of the language standard
999    * This is not a breaking change because this change also includes
1000      backwards-compatible support for semantic integrity checks produced by
1001      older versions of the interpreter
1002* Feature: Support Unicode path components
1003    * ... as standardized in version 6.0.0 of the language standard
1004    * You can now use Unicode in path components if they are quoted
1005    * i.e. `./families/"禺.dhall"` is now legal
1006* Feature: Add `Text/show` built-in
1007    * ... as standardized in version 6.0.0 of the language standard
1008    * You can now convert a `Text` literal to its equivalent Dhall source code
1009      (which is itself a `Text` literal)
1010    * This comes in handy when using Dhall code to generate JSON or Dhall code
1011    * See: https://github.com/dhall-lang/dhall-haskell/pull/811
1012* Feature: Add `--immediate-dependencies`/`--transitive-dependencies` flags for
1013  `dhall resolve`
1014    * You can now retrieve all of your immediate or transitive dependencies as a
1015      textual list
1016    * This simplifies integration with other command-line tools (such as file
1017      watchers)
1018    * See: https://github.com/dhall-lang/dhall-haskell/pull/795
1019    * See: https://github.com/dhall-lang/dhall-haskell/pull/803
1020* Feature: `dhall freeze` now only freezes remote imports by default
1021    * `dhall freeze` used to freeze all imports (including local imports and
1022      environment variables)
1023    * Now `dhall freeze` only freezes remote imports by default, which is what
1024      most users want
1025    * You can install freeze all imports using the `--all` flag
1026    * See: https://github.com/dhall-lang/dhall-haskell/pull/808
1027* Feature: `:save` and `:load` REPL state
1028    * `:save` with no arguments now saves the REPL state to a `.dhall-repl-N`
1029       file
1030    * The file format is a list of `dhall repl` commands
1031    * You can use `:load` to load the saved state back into the REPL
1032    * See: https://github.com/dhall-lang/dhall-haskell/pull/807
1033* Feature: Add `:hash` command to `dhall repl`
1034    * This lets you conveniently hash expressions within the `dhall repl`
1035    * See: https://github.com/dhall-lang/dhall-haskell/pull/806
1036* Feature: Add `--check` flag to `dhall format`
1037    * Use this to check if the input is already formatted
1038    * Useful for continuous integration when you want to ensure that all code
1039      under version control remains formatted
1040    * See: https://github.com/dhall-lang/dhall-haskell/pull/810
1041* Feature: Add  `UnionInputType` builder for `InputType`s
1042    * This is the union analog of `RecordInputType`, letting you build a
1043      record explicitly instead of deriving the instance using GHC generics
1044    * See: https://github.com/dhall-lang/dhall-haskell/pull/775
1045* Feature: Add `:set`/`:unset` commands to `dhall repl`
1046    * You can use these commands to set or unset command-line options
1047    * Currently only setting/unsetting `--explain` is supported
1048* Standards-compliance fixes:
1049    * See: https://github.com/dhall-lang/dhall-haskell/pull/779
1050    * See: https://github.com/dhall-lang/dhall-haskell/pull/804
1051    * See: https://github.com/dhall-lang/dhall-haskell/pull/833
1052* Documentation fixes:
1053    * See: https://github.com/dhall-lang/dhall-haskell/pull/792
1054    * See: https://github.com/dhall-lang/dhall-haskell/pull/825
1055* Test fixes:
1056    * See: https://github.com/dhall-lang/dhall-haskell/pull/782
1057    * See: https://github.com/dhall-lang/dhall-haskell/pull/836
1058* Improved error messages:
1059    * See: https://github.com/dhall-lang/dhall-haskell/pull/812
1060    * See: https://github.com/dhall-lang/dhall-haskell/pull/815
1061    * See: https://github.com/dhall-lang/dhall-haskell/pull/824
1062* Formatting fixes:
1063    * See: https://github.com/dhall-lang/dhall-haskell/pull/831
1064* REPL fixes:
1065    * See: https://github.com/dhall-lang/dhall-haskell/pull/837
1066
10671.20.1
1068
1069* BUG FIX: Fix binary encoding to use correct standard version
1070    * This fixes computed hashes to correctly match standard version 5.0.0
1071    * This is not marked as a breaking change since it is a bug fix.  The
1072      1.20.0 release will be blacklisted on Hackage and users should upgrade
1073      from 1.19.* directly to 1.20.1
1074    * See: https://github.com/dhall-lang/dhall-haskell/pull/771
1075
10761.20.0
1077
1078* Supports version 5.0.0 of the language standard
1079    * See: https://github.com/dhall-lang/dhall-lang/releases/tag/v5.0.0
1080* BREAKING CHANGE TO THE LANGUAGE: Implement standardized support for multi-line
1081  literals
1082    * This updates the multi-line support to match the standard
1083    * This is a breaking change because empty lines within the multi-line
1084      literal now require leading whitespace whereas previously they did not
1085    * This is also a breaking change because now a newline is required after
1086      the opening `''` quotes whereas previously it was not required
1087    * If you use `dhall format` then your multi-line literals already have the
1088      necessary leading whitespace
1089* BREAKING CHANGE TO THE LANGUAGE: `constructors x = x`
1090    * Now the `constructors` keyword behaves like an identity function, since
1091      constructors can already be accessed as fields off the original union
1092      type.
1093    * This is a breaking change since any record of terms that contains a
1094      `constructors` field will now be a forbidden mixed record of types and
1095      terms.
1096    * This is also a breaking change if you annotated the type of what used to
1097      be a `constructors` record.
1098    * `dhall lint` will now remove the obsolete `constructors` keyword for you
1099    * See: https://github.com/dhall-lang/dhall-haskell/pull/693
1100    * See: https://github.com/dhall-lang/dhall-haskell/pull/701
1101* BREAKING CHANGE TO THE API: Restore `Parent` constructor for `Local` type
1102    * This more closely matches the standard and also enables `dhall format` to
1103      produce a leading `../` for imports instead of `./../`
1104    * See: https://github.com/dhall-lang/dhall-haskell/pull/718
1105* BUG FIX: Fix type-checking bug for unions
1106    * The first fix was that the inferred type was wrong for unions where
1107      alternatives were types or kinds
1108    * The second fix was that unions that mixed terms/types/kinds were not
1109      properly rejected
1110    * See: https://github.com/dhall-lang/dhall-haskell/pull/763
1111* BUG FIX: Change how `dhall repl` handles prior definitions
1112    * This changes the REPL to handle previous bindings as if they were
1113      defined using a large `let` expression instead of adding them to the
1114      context
1115    * This fixes some type-checking false negatives
1116    * See: https://github.com/dhall-lang/dhall-haskell/pull/729
1117* Feature: Autocomplete for `dhall repl`
1118    * You can now auto-complete record fields, union constructors, and
1119      identifiers that are in scope
1120    * See: https://github.com/dhall-lang/dhall-haskell/pull/727
1121* Feature: GHCJS support
1122    * `dhall` can now be built using GHCJS, although some features are still
1123      not supported for GHCJS, such as:
1124        * Semantic integrity checks
1125        * Custom HTTP headers
1126    * Also, HTTP imports only work for URLs that support CORS
1127    * See: https://github.com/dhall-lang/dhall-haskell/pull/739
1128* Feature: Add support for records of records of types
1129    * You can now nest records of types
1130    * See: https://github.com/dhall-lang/dhall-haskell/pull/700
1131* Feature: Add `:quit` command for `dhall repl`
1132    * See: https://github.com/dhall-lang/dhall-haskell/pull/719
1133* Feature: Add `--json` flag for `dhall {encode,decode}`
1134    * You can now produce/consume CBOR expressions via JSON instead of binary
1135    * See: https://github.com/dhall-lang/dhall-haskell/pull/717
1136* Feature: Add decoding logic for `as Text`
1137    * You can now preserve the `as Text` qualifier on imports when serializing
1138      them
1139    * See: https://github.com/dhall-lang/dhall-haskell/pull/712
1140* Prenormalize substituted expressions
1141    * This is a performance improvement that reduces the time and memory
1142      consumption when normalizing expressions
1143    * See: https://github.com/dhall-lang/dhall-haskell/pull/765
1144
11451.19.1
1146
1147
1148* BUG FIX: Fix serious `dhall lint` bug
1149    * `dhall lint` would sometimes remove `let` expressions that were still
1150      in use
1151    * See: https://github.com/dhall-lang/dhall-haskell/pull/703
1152* BUG FIX: Fix import caching efficiency bug
1153    * Some imports were being wastefully fetched multiple times
1154    * See: https://github.com/dhall-lang/dhall-haskell/pull/702
1155* Feature: Generate dot graph to visualize import graph
1156    * Use the `dhall resolve --dot` command
1157    * See: https://github.com/dhall-lang/dhall-haskell/pull/698
1158    * See: https://github.com/dhall-lang/dhall-haskell/pull/713
1159* Improve HTTP error messages
1160    * See: https://github.com/dhall-lang/dhall-haskell/pull/710
1161
11621.19.0
1163
1164* Supports version 4.0.0 of the language standard
1165    * See: https://github.com/dhall-lang/dhall-lang/releases/tag/v4.0.0
1166* BREAKING CHANGE TO THE LANGUAGE AND API: Prevent Hurkens' paradox
1167    * This fixes a type-checking soundness bug which permitted infinite loops
1168    * This is a breaking change because infinite loops are no longer possible
1169    * This is also a breaking change because a record of types is now treated as
1170      a kind instead of a type
1171    * See: https://github.com/dhall-lang/dhall-haskell/pull/680
1172* BREAKING CHANGE TO THE LANGUAGE AND API: `Double`s are now double-precision
1173  floating point numbers
1174    * This restricts the range of `Double`s to IEEE 754 double-precision
1175      floating point
1176    * This also implies that you can no longer convert `Scientific` values to
1177      `Dhall` expressions (i.e. no `Inject` instance for `Scientific`)
1178    * See: https://github.com/dhall-lang/dhall-haskell/pull/667
1179* BREAKING CHANGE TO THE API: Preserve field order for record projection
1180    * The API uses a new `Dhall.Set.Set` type instead of `Data.Set.Set`
1181    * See: https://github.com/dhall-lang/dhall-haskell/pull/670
1182* BREAKING CHANGE TO THE API: Add support for multi-`let` expressions
1183    * This changes the `Let` constructor to now support storing multiple
1184      bindings per `let` expression
1185    * See: https://github.com/dhall-lang/dhall-haskell/pull/675
1186* Access constructors as if they were fields of the union type
1187    * In other words: `< Left : Bool | Right : Natural >.Left`
1188    * See: https://github.com/dhall-lang/dhall-haskell/pull/657
1189* Support GHC 8.6
1190    * See: https://github.com/dhall-lang/dhall-haskell/pull/669
1191* Add support for quoted path components
1192    * i.e. `/"foo"/bar/"baz qux"` or `https://example.com/foo/"bar?baz"?qux`
1193    * See: https://github.com/dhall-lang/dhall-haskell/pull/690
1194* Fix parsing of `//\\` operator
1195    * See: https://github.com/dhall-lang/dhall-haskell/commit/9d0fd42d95ab69fa64da4afd8b60d69aca8e65a6
1196* Preserve Unicode characters when formatting code
1197    * See: https://github.com/dhall-lang/dhall-haskell/pull/679
1198* Allow identifier names to begin with `Some`
1199    * See: https://github.com/dhall-lang/dhall-haskell/pull/658
1200* Add `subExpressions` `Traversal`
1201    * See: https://github.com/dhall-lang/dhall-haskell/pull/660
1202* Add `normalizeWithM` for monadic normalization
1203    * See: https://github.com/dhall-lang/dhall-haskell/pull/371
1204* Custom normalizers now take precedence over default normalization logic
1205    * This allows one to override the implementation of built-in operators
1206    * See: https://github.com/dhall-lang/dhall-haskell/pull/684
1207
12081.18.0
1209
1210* Supports version 3.0.0 of the language standard:
1211    * See: https://github.com/dhall-lang/dhall-lang/releases/tag/v3.0.0
1212* BREAKING CHANGE TO THE LANGUAGE AND API: New `Some`/`None` constructors for
1213  `Optional` values
1214    * Example: `[ Some 1, None Natural ]`
1215    * This is a breaking change to the language because `Some` and `None` are
1216      now reserved keywords
1217    * This is a breaking change to the API because `Some` and `None` are new
1218      constructors for the `Expr` type
1219* BREAKING CHANGE TO THE LANGUAGE AND API: Support for kind polymorphism
1220    * This adds a new `Sort` constant above `Kind` in the hierarchy
1221    * i.e. `Type : Kind : Sort`
1222    * This is a breaking change to the language because `Sort` is now a
1223      reserved keyword
1224    * This is a breaking change to the API because `Sort` is a new
1225      constructor for the `Expr` type
1226* BREAKING CHANGE TO THE API: New `Dhall.Map` module
1227    * This replaces `InsOrdHashMap` in the API
1228    * The primary motivation is to improve performance and to remove the
1229      dependency on `insert-ordered-containers`
1230* BREAKING CHANGE TO THE API: Use standard version instead of protocol version
1231    * The binary protocol is now versioned alongside the standard
1232    * The `ProtocolVersion` type is renamed to `StandardVersion` and the
1233    * `--protocol-version` option is renamed to `--standard-version`
1234    * See: https://github.com/dhall-lang/dhall-haskell/pull/634
1235* BUG FIX: Fix import chaining for custom header imports
1236    * See: https://github.com/dhall-lang/dhall-haskell/pull/618
1237* BUG FIX: Fix import chaining for imports protected by semantic integrity
1238  checks
1239    * See: https://github.com/dhall-lang/dhall-haskell/pull/584
1240* BUG FIX: Record literals and types produced by `∧`/`⫽`/`⩓` are now sorted
1241    * This ensures that β-normalization is idempotent
1242    * See: https://github.com/dhall-lang/dhall-haskell/pull/572
1243* BUG FIX: `dhall freeze` now correctly handles the starting file being
1244  located outside the current working directory
1245    * See: https://github.com/dhall-lang/dhall-haskell/commit/a22aa79d1957be9ecf166ea066e2a9a5b309e1ae
1246* BUG FIX: Fix parsing of IPv4-mapped IPv6 addresses
1247    * See: https://github.com/dhall-lang/dhall-haskell/pull/632
1248* FEATURE: New `--ascii` flag for ASCII output
1249    * See: https://github.com/dhall-lang/dhall-haskell/pull/570
1250* FEATURE: New `dhall encode` and `dhall decode` subcommands
1251    * These allow you to transform Dhall source code to and from its binary
1252      representation
1253    * See: https://github.com/dhall-lang/dhall-haskell/pull/588
1254* LARGE parsing performance improvements
1255    * Parsing is about 10x-100x faster on most code
1256    * See: https://github.com/dhall-lang/dhall-haskell/pull/591
1257    * See: https://github.com/dhall-lang/dhall-haskell/pull/592
1258    * See: https://github.com/dhall-lang/dhall-haskell/pull/597
1259    * See: https://github.com/dhall-lang/dhall-haskell/pull/601
1260    * See: https://github.com/dhall-lang/dhall-haskell/pull/602
1261    * See: https://github.com/dhall-lang/dhall-haskell/pull/604
1262    * See: https://github.com/dhall-lang/dhall-haskell/pull/606
1263* Type-checking performance improvements:
1264    * See: https://github.com/dhall-lang/dhall-haskell/pull/566
1265* Normalization performance improvements:
1266    * See: https://github.com/dhall-lang/dhall-haskell/pull/610
1267* `dhall freeze` now caches the imports as it freezes them
1268    * See: https://github.com/dhall-lang/dhall-haskell/pull/587
1269* `dhall freeze` now refreezes imports with invalid semantic integrity checks
1270    * See: https://github.com/dhall-lang/dhall-haskell/pull/637
1271* `dhall freeze` now adds a trailing newline
1272    * See: https://github.com/dhall-lang/dhall-haskell/pull/629
1273* Build against `megaparsec-7.0.*`
1274    * See: https://github.com/dhall-lang/dhall-haskell/pull/565
1275* Support GHC 8.6
1276    * See: https://github.com/dhall-lang/dhall-haskell/pull/599
1277    * See: https://github.com/dhall-lang/dhall-haskell/pull/623
1278* Support GHC all the way back to 7.10.3
1279    * See: https://github.com/dhall-lang/dhall-haskell/pull/595
1280    * See: https://github.com/dhall-lang/dhall-haskell/pull/621
1281* Improvements to error messages:
1282    * See: https://github.com/dhall-lang/dhall-haskell/pull/563
1283    * See: https://github.com/dhall-lang/dhall-haskell/pull/576
1284    * See: https://github.com/dhall-lang/dhall-haskell/pull/583
1285    * See: https://github.com/dhall-lang/dhall-haskell/pull/589
1286
1287
12881.17.0
1289
1290* This release corresponds to version 2.0.0 of the language standard
1291* BREAKING CHANGE TO THE LANGUAGE AND API: Binary serialization support
1292    * This is a breaking change to the hash for all semantic integrity checks
1293    * The hash used by the semantic integrity check is now based on the
1294      binary representation instead of a text representation of the
1295      expression
1296    * You can pin the new hashes by supplying the `--protocol-version 1.0`
1297      option on the command line until you need support for newer language
1298      features
1299    * This also includes a breaking change to `ImportType` in the API
1300* BREAKING CHANGE TO THE LANGUAGE: Disallow combining records of terms and
1301  types
1302    * This is mainly for consistency and to improve type errors that would
1303      have otherwise happened further downstream
1304    * This should not affect the vast majority of code
1305    * See: https://github.com/dhall-lang/dhall-haskell/pull/538
1306* BUG FIX: Semantic integrity checks now work for imported expression using
1307  the `constructors` keyword
1308    * See: https://github.com/dhall-lang/dhall-haskell/pull/554
1309* BUG FIX: Fix α-normalization of expressions with bound variables named `_`
1310    * See: https://github.com/dhall-lang/dhall-haskell/pull/524
1311* BUG FIX: Fix `isNormalized` to match `normalize`
1312    * See: https://github.com/dhall-lang/dhall-haskell/pull/522
1313* BUG FIX: `dhall lint` now correctly handles nested `let` expressions
1314    * See: https://github.com/dhall-lang/dhall-haskell/pull/555
1315* FEATURE: Imports protected by a semantic integrity check are now cached
1316    * See: https://github.com/dhall-lang/dhall-haskell/pull/533
1317* The default `dhall` command no longer outputs the type to `stderr`
1318    * You can add back the type as a type annotation using the
1319      `--annotate` switch
1320    * See: https://github.com/dhall-lang/dhall-haskell/pull/544
1321* New utilities for building `InputTypes`
1322    * See: https://github.com/dhall-lang/dhall-haskell/pull/530
1323* Improve parsing performance for long variable names
1324    * See: https://github.com/dhall-lang/dhall-haskell/pull/526
1325* More succinct type diffs for function types
1326    * See: https://github.com/dhall-lang/dhall-haskell/pull/540
1327* Identifier names can now begin with keywords
1328    * i.e. `ifChanged` and `lettuce` are now legal identifiers
1329    * See: https://github.com/dhall-lang/dhall-haskell/pull/551
1330
13311.16.1
1332
1333* Fix test failure due to missing test data file
1334
13351.16.0
1336
1337* BREAKING CHANGE: Consolidate `input` family of functions
1338    * These now take a record of options
1339    * This also `_stack` field of the `Status` type from `[Import]` to
1340      `NonEmpty Import`
1341* Permit `$` in quoted variable names
1342    * See: https://github.com/dhall-lang/dhall-haskell/pull/510
1343
13441.15.1
1345
1346* Fix infinite loop when formatting expressions containing `?`
1347    * See: https://github.com/dhall-lang/dhall-haskell/pull/491
1348
13491.15.0
1350
1351* BREAKING CHANGE TO THE API: Support alternative imports using new `?` operator
1352    * This adds a new constructor which affects exhaustive pattern matches
1353    * See: https://github.com/dhall-lang/dhall-haskell/pull/473
1354* BREAKING CHANGE TO THE API: Add `Integer/toDouble` built-in function
1355    * This adds a new constructor which affects exhaustive pattern matches
1356    * See: https://github.com/dhall-lang/dhall-haskell/pull/434
1357* BREAKING CHANGE TO THE API: Use strict `Text` instead of lazy `Text`
1358    * See: https://github.com/dhall-lang/dhall-haskell/pull/455
1359* BREAKING CHANGE TO THE API: Remove `Buildable` in favor of `Pretty`
1360    * See: https://github.com/dhall-lang/dhall-haskell/pull/459
1361* BREAKING CHANGE TO THE API: Removed the `Parent` constructor from `FilePrefix`
1362    * Instead, use `Here` with a `".."` prefix.
1363    * See: https://github.com/dhall-lang/dhall-haskell/pull/407
1364* BUG FIX: Disallow duplicate fields in records
1365    * See: https://github.com/dhall-lang/dhall-haskell/pull/430
1366* BUG FIX: Fix stripping of leading whitespace in multi-line strings
1367    * See: https://github.com/dhall-lang/dhall-haskell/pull/469
1368* BUG FIX: Fix formatting field access of an import
1369    * See: https://github.com/dhall-lang/dhall-haskell/pull/471
1370* Add `dhall freeze` command
1371    * See: https://github.com/dhall-lang/dhall-haskell/pull/486
1372* Add `dhall diff` command
1373    * See: https://github.com/dhall-lang/dhall-haskell/pull/442
1374* Add `dhall lint` command
1375    * See: https://github.com/dhall-lang/dhall-haskell/pull/484
1376* Change `dhall-repl`/`dhall-hash`/`dhall-format` to `dhall` subcommands
1377    * i.e. `dhall repl`/`dhall hash`/`dhall format`
1378    * See: https://github.com/dhall-lang/dhall-haskell/pull/435
1379    * See: https://github.com/dhall-lang/dhall-haskell/pull/452
1380* Add `with-http` cabal flag to disable support for remote imports
1381    * See: https://github.com/dhall-lang/dhall-haskell/pull/482
1382* Added `inputFrom` and `inputFromWith`
1383    * These allow naming the file that the expression is coming from for better
1384      error messages
1385    * See: https://github.com/dhall-lang/dhall-haskell/pull/464
1386* Performance improvements
1387    * See: https://github.com/dhall-lang/dhall-haskell/pull/420
1388* Tutorial recommends GitHub for Prelude instead of IPFS
1389    * See: https://github.com/dhall-lang/dhall-haskell/pull/479
1390* Pretty-print expressions in type errors
1391    * See: https://github.com/dhall-lang/dhall-haskell/pull/429
1392* Formatting improvements
1393    * See: https://github.com/dhall-lang/dhall-haskell/pull/398
1394    * See: https://github.com/dhall-lang/dhall-haskell/pull/458
1395* Diff improvements
1396    * See: https://github.com/dhall-lang/dhall-haskell/pull/455
1397    * See: https://github.com/dhall-lang/dhall-haskell/pull/470
1398    * See: https://github.com/dhall-lang/dhall-haskell/pull/478
1399
14001.14.0
1401
1402* BREAKING CHANGE TO THE LANGUAGE: Switch grammar of `Natural` and `Integer`
1403    * `Natural` number literals are now unsigned and `Integer` literals always
1404      require a sign
1405    * This is a **VERY** disruptive change to most Dhall code in the wild but
1406      was unanimously agreed upon here:
1407      https://github.com/dhall-lang/dhall-lang/issues/138
1408    * See also: https://github.com/dhall-lang/dhall-haskell/pull/381
1409* BREAKING CHANGE TO THE LANGUAGE: Drop support for importing directories
1410    * Importing `dir/` used to resolve to `dir/@`, which is no longer supported
1411    * See: https://github.com/dhall-lang/dhall-haskell/pull/384
1412* BREAKING CHANGE TO THE LANGUAGE: Change to the grammar for imports
1413    * File path components can no longer contain `#` or `?` characters
1414    * URL imports must now contain at least one path component
1415    * URL path components must match the grammar for file path components
1416    * See: https://github.com/dhall-lang/dhall-haskell/pull/390
1417* BREAKING CHANGE TO THE API: Rename `Path{,Mode,Hashed,Type}` to
1418  `Import{,Mode,Hashed,Type}`
1419    * In practice this change is not breaking for the most common use cases
1420      since this also provides a `Path` type synonym for backwards compatibility
1421    * See: https://github.com/dhall-lang/dhall-haskell/pull/376
1422* BUG FIX: Fix α-equivalence bug when type-checking `merge`
1423    * `merge` expressions would sometimes reject valid code due to a
1424       type-checking bug
1425    * See: https://github.com/dhall-lang/dhall-haskell/pull/394
1426* Improve import caching
1427    * See: https://github.com/dhall-lang/dhall-haskell/pull/388
1428    * See: https://github.com/dhall-lang/dhall-haskell/pull/392
1429* Increase upper bound on `tasty`
1430    * See: https://github.com/dhall-lang/dhall-haskell/pull/382
1431* Fix lower bound on `insert-ordered-containers`
1432    * See: https://github.com/dhall-lang/dhall-haskell/pull/377
1433
14341.13.1
1435
1436* Increase upper bound on `ansi-terminal` and `megaparsec`
1437
14381.13.0
1439
1440* BUG FIX: Fix semantic integrity hashing support
1441    * Both parsing and pretty-printing semantic hashes were broken since version
1442      1.11.0
1443    * See: https://github.com/dhall-lang/dhall-haskell/pull/345
1444* BUG FIX: Allow leading whitespace in interpolated expresssions
1445    * See: https://github.com/dhall-lang/dhall-haskell/pull/369
1446* BUG FIX: Fix `deriving (Interpret)` for sum types
1447    * The types of alternatives were not correctly included in the corresponding
1448      Dhall type
1449    * See: https://github.com/dhall-lang/dhall-haskell/pull/348
1450* BREAKING CHANGE TO LANGUAGE: Records cannot store both types and terms
1451    * Records can also not store type-level functions (like `List`)
1452        * Records might be allowed to store type-level functions again in the
1453          future
1454    * This fixes a potential soundness bug
1455    * The primarily practical consequence of this change is that if you are
1456      hosting a "package" then you will need to split terms and types from your
1457      package into different records for your users to import
1458    * This also implies removing the `./Monoid` type-level function from the
1459      `./Prelude/package.dhall` record
1460    * See: https://github.com/dhall-lang/dhall-haskell/pull/335
1461* BREAKING CHANGE TO THE API: Replace `trifecta` with `megaparsec`
1462    * This change the API to use the `Parser` type from `megaparsec`
1463    * This also slightly changes the type of `exprFromText`
1464    * If you program using the type classes provided by the `parsers` library
1465      then this is not a breaking change as that interface is preserved
1466    * See: https://github.com/dhall-lang/dhall-haskell/pull/268
1467* BREAKING CHANGE TO THE API: New `⩓` operator for merging record types
1468    * Example: `{ foo : Text } ⩓ { bar : Bool } = { foo : Text, bar : Bool }`
1469    * This is breaking because it adds a new constructor to the `Expr` type
1470    * See: https://github.com/dhall-lang/dhall-haskell/pull/342
1471* BREAKING CHANGE TO THE API: New support for projecting a subset of fields
1472    * Example: `{ x = 1, y = 2, z = 3 }.{ x, y } = { x = 1, y = 2 }`
1473    * This is breaking because it adds a new constructor to the `Expr` type
1474    * See: https://github.com/dhall-lang/dhall-haskell/pull/350
1475* API+UX feature: New support for pretty-printing diffs of Dhall expressions
1476    * Error messages also use this feature to simplify large type mismatches
1477    * There is also a new `Dhall.Diff` module
1478    * See: https://github.com/dhall-lang/dhall-haskell/pull/336
1479* Add `version`, `resolve`, `type`, and `normalize` sub-commands to interpreter
1480    * See: https://github.com/dhall-lang/dhall-haskell/pull/352
1481* Support GHC 7.10.3
1482    * See: https://github.com/dhall-lang/dhall-haskell/pull/340
1483* `:type` command in `dhall-repl` now only displays the type
1484    * Before it would also display the original expression
1485    * See: https://github.com/dhall-lang/dhall-haskell/pull/344
1486* Trim dependency tree
1487    * See: https://github.com/dhall-lang/dhall-haskell/pull/351
1488    * See: https://github.com/dhall-lang/dhall-haskell/pull/268
1489    * See: https://github.com/dhall-lang/dhall-haskell/pull/355
1490
14911.12.0
1492
1493* Additional changes to support GHC 8.4
1494    * See: https://github.com/dhall-lang/dhall-haskell/pull/331
1495* BREAKING CHANGE TO API: Replace dependency on `text-format` with `formatting`
1496    * This replace the `Data.Text.Buildable.Buildable` instances with
1497      `Formatting.Buildable.Buildable` instances, which is why this is a
1498       breaking change
1499    * `text-format` is no longer maintained and blocking GHC 8.4 support
1500    * See: https://github.com/dhall-lang/dhall-haskell/pull/330
1501
15021.11.1
1503
1504* Support GHC 8.4
1505    * See: https://github.com/dhall-lang/dhall-haskell/pull/321
1506* Fix α-normalization bug
1507    * Note that this is not a type-checking bug.  This only affects users who
1508      were directly using the `alphaNormalize` function from the Haskell API
1509      because `let` expressions were not correctly α-normalized
1510    * See: https://github.com/dhall-lang/dhall-haskell/pull/319
1511* Slight tweak to syntax highlighting
1512    * See: https://github.com/dhall-lang/dhall-haskell/pull/324
1513* Increase upper bound on `ansi-terminal` and `exceptions`
1514    * See: https://github.com/dhall-lang/dhall-haskell/pull/322
1515    * See: https://github.com/dhall-lang/dhall-haskell/pull/325
1516
15171.11.0
1518
1519* BREAKING CHANGE TO THE API: Fix `{Natural,Optional,List}/build` semantics to
1520  match standard
1521    * This is a breaking change because the `OptionalLit` and `ListLit`
1522      constructors changed their representations to efficiently support the
1523      standard semantics
1524    * `ListLit` now stores a `Data.Sequence.Seq` instead of a
1525      `Data.Vector.Vector`
1526    * `OptionalLit` now stores a `Maybe` instead of a `Data.Vector.Vector`
1527    * See: https://github.com/dhall-lang/dhall-haskell/pull/300
1528* BREAKING CHANGE TO THE COMMAND LINE: `dhall` executable always formats output
1529    * Previously you had to opt into formatting using `--pretty`
1530    * Now formatting is obligatory and the `--pretty` flag is gone
1531    * See: https://github.com/dhall-lang/dhall-haskell/pull/303
1532* Feature: New `:save` command for `dhall-repl`
1533    * Now you can save an expression to a file: `./yourFile = someExpression`
1534    * See: https://github.com/dhall-lang/dhall-haskell/pull/309
1535* Improvement: Add new simplifications to match standard
1536    * See: https://github.com/dhall-lang/dhall-haskell/pull/312
1537    * See: https://github.com/dhall-lang/dhall-haskell/pull/316
1538* Improvement: Fix equivalence check to match standard
1539    * Practically this means that more corner cases of the language correctly
1540      type-check than before
1541* Improvement: New `--plain` flag to disable syntax highlighting
1542    * See: https://github.com/dhall-lang/dhall-haskell/pull/310
1543* Improvement: Prelude now provides an umbrella `package.dhall` import
1544    * This is primarily for convenience
1545    * See: https://github.com/dhall-lang/dhall-haskell/pull/298
1546* Improvement: Context is now normalized
1547    * See: https://github.com/dhall-lang/dhall-haskell/pull/302
1548* Replace `cryptohash` dependency with `cryptonite`
1549    * See: https://github.com/dhall-lang/dhall-haskell/commit/5d2012927a062ec8bdf2bbaba77150344f38db77
1550* Increase upper bound on exceptions
1551    * See: https://github.com/dhall-lang/dhall-haskell/pull/306
1552* Fix type error in tutorial
1553    * See: https://github.com/dhall-lang/dhall-haskell/commit/5a9126b2f684d3236fc1e8e20e206cfaf47d97db
1554
15551.10.0
1556
1557* Feature: Records/unions can now have fields/alternatives that are types
1558    * i.e. `{ foo = Text, bar = List }` is legal now
1559    * See: https://github.com/dhall-lang/dhall-haskell/pull/273
1560* Feature: New `dhall-repl` for interactively evaluating Dhall expressions
1561    * See: https://github.com/dhall-lang/dhall-haskell/pull/266
1562* Feature: Syntax highlighting
1563    * See: https://github.com/dhall-lang/dhall-haskell/pull/260
1564* Feature: BREAKING CHANGE TO THE API: `dhall-format` preserves field order
1565    * This changes the syntax tree to use an `InsOrdHashMap` instead of a `Map`
1566* BREAKING CHANGE TO THE API: Use Haskell's `Scientific` type
1567    * This is fixes the interpreter to correct handle really large/small numbers
1568    * This also allows marshaling into Haskell's `Scientific` type
1569    * See: https://github.com/dhall-lang/dhall-haskell/pull/256
1570* BREAKING CHANGE TO THE API: Remove `system-filepath`/`system-fileio` dependencies
1571    * Now the library uses `Prelude.FilePath`
1572    * See: https://github.com/dhall-lang/dhall-haskell/pull/248
1573* Feature: Labels can now begin with reserved names
1574    * i.e. `List/map` is now a legal label
1575    * See: https://github.com/dhall-lang/dhall-haskell/pull/255
1576* Fix: Rendered labels are now correctly escaped if they are numbers
1577    * See: https://github.com/dhall-lang/dhall-haskell/pull/252
1578* Add the instance `Interpret String`.
1579    * See: https://github.com/dhall-lang/dhall-haskell/pull/247
1580* Fix: Custom contexts passed to `typeWith` are now checked
1581    * This prevents a custom context from triggering an infinite loop
1582    * See: https://github.com/dhall-lang/dhall-haskell/pull/259
1583
15841.9.1
1585
1586* `dhall-format` now emits single-quoted strings for multi-line strings
1587    * See: https://github.com/dhall-lang/dhall-haskell/pull/237
1588* Improved error messages for list elements with the wrong type
1589    * See: https://github.com/dhall-lang/dhall-haskell/pull/236
1590* Change `lens` dependency to `lens-family-core`
1591    * See: https://github.com/dhall-lang/dhall-haskell/pull/238
1592
15931.9.0
1594
1595* Feature: BREAKING CHANGE TO LANGUAGE AND API: Add `constructors` keyword
1596    * This new keyword generates constructors from a union type
1597        * See the updated Haskell tutorial for more details
1598    * This means that `constructors` is now a reserved keyword
1599    * This adds a new `Constructors` constructor to the `Expr` type
1600    * See: https://github.com/dhall-lang/dhall-haskell/pull/199
1601* Feature: BREAKING CHANGE TO THE API: `dhall-format` preserves interpolation
1602    * This changes the `TextLit` constructor to represent an interpolated `Text`
1603      literal
1604    * See: https://github.com/dhall-lang/dhall-haskell/pull/220
1605* Feature: You can now define type synonyms using `let`
1606    * See: https://github.com/dhall-lang/dhall-haskell/pull/202
1607* Feature: Extend valid set of quoted labels
1608    * See: https://github.com/dhall-lang/dhall-lang/pull/65
1609    * See: https://github.com/dhall-lang/dhall-lang/pull/77
1610* Performance: Improve startup time when importing files, but not URLs
1611    * See: https://github.com/dhall-lang/dhall-haskell/pull/194
1612* Security: `localhost`/`127.0.0.1` imports no longer count as local imports
1613    * Specifically: they cannot import environment variables or files
1614    * See: https://github.com/dhall-lang/dhall-haskell/pull/197
1615* Security: Fix potential type-checking bug
1616    * See: https://github.com/dhall-lang/dhall-haskell/pull/198
1617* Fix: BREAKING CHANGE TO API: Improve localization of error messages
1618    * This required fixing the type of `normalize`/`shift`/`subst` to preserve
1619      the first type parameter of `Expr` (i.e. they no longer delete `Note`
1620      constructors)
1621    * A new `denote` function was added for the explicit purpose of deleting
1622      `Note` constructors
1623    * See: https://github.com/dhall-lang/dhall-haskell/pull/218
1624* Expose `MissingEnvironmentVariable` exception type
1625    * See: https://github.com/dhall-lang/dhall-haskell/pull/196
1626* Add `genericAuto`
1627    * See: https://github.com/dhall-lang/dhall-haskell/pull/195
1628* Add `inputWith`
1629    * See: https://github.com/dhall-lang/dhall-haskell/pull/222
1630* Add`loadWithContext`
1631    * See: https://github.com/dhall-lang/dhall-haskell/pull/215
1632* Add `pair`/`unit`/`string`/`list`
1633    * See: https://github.com/dhall-lang/dhall-haskell/pull/227
1634
16351.8.2
1636
1637* Add `typeWithA` for type-checking custom `Embed`ded values
1638* Fix `dhall{,-*}` executables to ignore ambient locale and use UTF8
1639* Increase upper bound on `tasty` dependency
1640
16411.8.1
1642
1643* `dhall` executable can now format output using `--pretty`
1644* Improved Unicode suppport on Windows
1645
16461.8.0
1647
1648* BREAKING CHANGE TO LANGUAGE: Add support for import integrity checks
1649    * In practice, the likelihood of this breaking code in the wild is
1650      astronomically low
1651    * This would only break code of the form `sha256:aaa...aaa` (i.e. a
1652      variabled named `sha256` with a type annotation for a type with a name
1653      64 characters long drawn from the first 6 characters of the alphabet)
1654* BUG FIX: Fix parsing of single quotes in single-quoted strings
1655* BUG FIX: Fix superfluous parentheses introduced by `dhall-format`
1656* New `dhall-hash` executable
1657    * This goes hand-in-hand with the added support for integrity checks since
1658      the executable lets you compute the current hash of an import
1659
16601.7.0
1661
1662* BREAKING CHANGE TO LANGUAGE: Update parser to match standardized grammar
1663    * Trailing commas and bars no longer supported for union and record literals
1664    * Paths no longer permit commas
1665    * URL grammar is now RFC-compliant
1666    * Environment variables can now be quoted to support full range of
1667      POSIX-compliant names
1668    * Text literals support full set of JSON escape sequences (such as `\u2192`)
1669* BREAKING CHANGE TO LANGUAGE: Single quoted strings strip leading newlines
1670* BUG FIX: Fixed type-checking infinite loops due to non-type-checked variables
1671  in context
1672* BUG FIX: Fixed type-checking bug due to missing context when type-checking
1673  certain expressions
1674* BUG FIX: Fixed type-checking bug due to off-by-one errors in name shadowing
1675  logic
1676* New `dhall-format` executable to automatically format code
1677* Performance optimizations to `Natural/fold` and `List/fold`
1678* Improved parsing performance (over 3x faster)
1679* Union literals can now specify the set value anywhere in the literal
1680    * i.e. `< A : Integer | B = False | C : Text >`
1681* New `Inject` instance for `()`
1682* Several tutorial fixes and improvements
1683
16841.6.0
1685
1686* BREAKING CHANGE TO THE API: Drop support for GHC 7.*
1687* BREAKING CHANGE TO THE API: Add support for customizing Dhall import
1688    * This is a breaking change because this changes the type of `loadWith`
1689* BREAKING CHANGE TO THE API: Add field to `UnboundVariable` error containing
1690* BUG FIX: Fix parsing single quotes in string literals
1691  the name of the unbound variable
1692* Add `List/concatMap` to the Prelude
1693* You can now derive `Inject` and `Interpret` for types with unlabeled fields
1694* Add new instances for `Interpret`:
1695    * `[]`
1696    * `(,)`
1697* Add new instance for `Inject`
1698    * `[]`, `Data.Set.Set`, `Data.Sequence.Seq`
1699    * `(,)`
1700    * `Int`, `Word8`, `Word16`, `Word32`, `Word64`
1701* Add `Eq` instance for `Src`
1702
17031.5.1
1704
1705* Increase upper bound on `vector` and `optparse-generic`
1706
17071.5.0
1708
1709* BREAKING CHANGE: Add list concatenation operator: `(#)`
1710    * This is a breaking change because it adds a new constructor to the `Expr`
1711      type which breaks exhaustive pattern matches
1712* BREAKING CHANGE: Add `Interpret` support for lazy `Text`
1713    * This is a breaking change because it renames `text` to `strictText`
1714* Add `Interpret` instance for decoding (a limited subset of) Dhall functions
1715* Dhall no longer requires Template Haskell to compile
1716    * This helps with cross-compilation
1717* Add `rawInput` utility for decoding a Haskell value from the `Expr` type
1718* Add `loadWith`/`normalizeWith` utilities for normalizing/importing modules
1719  with a custom context
1720* Export `Type` constructor
1721
17221.4.2
1723
1724* Fix missing `Prelude` files in package archive uploaded to Hackage
1725
17261.4.1
1727
1728* Fix missing `tests/Tutorial.hs` module in package archive uploaded to Hackage
1729
17301.4.0
1731
1732* BREAKING CHANGE TO THE LANGUAGE AND API: You can now supply custom headers for
1733  URL imports with the new `using` keyword
1734    * This is a breaking change to the language because this adds a new reserved
1735      `using` keyword
1736    * This is a breaking change to the API because this adds a new field to the
1737      `URL` constructor to store optional custom headers
1738* BUG FIX: `:` is no longer a disallowed path character
1739    * This was breaking URL imports with a port
1740* BUG FIX: If you import a home-anchored path (i.e. `~/foo`) and that imports a
1741  relative path (like `./bar`), then the canonical path of the relative import
1742  should be home-anchored (i.e. `~/bar`).  However, there was a bug that made
1743  lose the home anchor (i.e. `./foo/bar`), which this release fixes
1744  likely fail due to no longer being home-anchored (i.e. `./foob
1745* Add support for string interpolation
1746* `merge` no longer requires a type annotation if you are merging at least one
1747  alternative
1748* Expanded Prelude
1749    * `./Prelude/Optional/all`
1750    * `./Prelude/Optional/any`
1751    * `./Prelude/Optional/filter`
1752    * `./Prelude/Optional/length`
1753    * `./Prelude/Optional/null`
1754    * `./Prelude/Text/concatMap`
1755    * `./Prelude/Text/concatMapSep`
1756    * `./Prelude/Text/concatSep`
1757* Rearrange detailed error messages to put summary information at the bottom of
1758  the message
1759
17601.3.0
1761
1762* BREAKING CHANGE TO THE API: Add support for new primitives, specifically:
1763    * `(//)` - Right-biased and shallow record merge
1764    * `Optional/build` (now a built-in in order to support build/fold fusion)
1765    * `Natural/show`
1766    * `Integer/show`
1767    * `Double/show`
1768    * `Natural/toInteger`
1769    * These all add new constructors to the `Expr` type, which would break
1770      exhaustive pattern matches
1771* BREAKING CHANGE TO THE LANGUAGE: Imported paths and URLs no longer support
1772  the characters: "()[]{}<>:"
1773    * This reduces the number of cases where you have to add a space after
1774      imports
1775    * Note that this does not exclude the `:` in the URL scheme (i.e. `http://`)
1776* Increase connection timeout for imports
1777* Variable names now allow the `-` character for all but the first character
1778* You can now escape identifiers with backticks
1779    * This lets you name identifiers so that they don't conflict with reserved
1780      key words
1781    * This is most useful when converting Dhall to other file formats (like
1782      JSON) where you might need to emit a field that conflicts with one of
1783      Dhall's reserved keywords
1784* New `--version` flag for the `dhall` executable
1785
17861.2.0
1787
1788* BREAKING CHANGE: Add support for customizing derived `Interpret` instances
1789    * This is a breaking change to the Dhall library API since this changes the
1790      signature of the `Interpret` class by replacing the `auto` method with a
1791      more general `autoWith` method.  This `autoWith` now takes an
1792      `InterpretOptions` argument that lets you customize derived field and
1793      constuctor names
1794    * In practice user programs that use the common path will be unaffected by
1795      this change
1796    * This is not a breaking change to the Dhall language
1797* BREAKING CHANGE: Type annotations now bind more tightly than lambda
1798  abstraction
1799    * This is a breaking change to the Dhall language.  An expression like this:
1800
1801      ```
1802      λ(x : A) → y : B
1803      ```
1804
1805      ... used to parenthesized implicitly as:
1806
1807      ```
1808      (λ(x : A) → y) : T
1809      ```
1810
1811      ... but is now parenthesized implicitly as:
1812
1813      ```
1814      λ(x : A) → (y : T)
1815      ```
1816
1817      This is now consistent with Haskell's precedence and also consistent with
1818      the precedence of `List` and `Optional` type annotations
1819
1820    * This change affects programs with an expression like this:
1821
1822      ```
1823      -- Assuming that `y : B`
1824      λ(x : A) → y : A → B
1825      ```
1826
1827      The above program would type-check before this change but not type-check
1828      after this change.  You would you need to fix the above program by either
1829      changing the type signature to annotate just the type of `y` like this:
1830
1831      ```
1832      λ(x : A) → y : B
1833      ```
1834
1835      ... or by adding explicit parentheses like this:
1836
1837      ```
1838      (λ(x : A) → y) : A → B
1839      ```
1840
1841    * This is not a breaking change to the Dhall library API
1842* BREAKING CHANGE: Add support for importing a path's contents as raw `Text` by
1843  adding `as Text` after the import
1844    * This is a breaking change to the Dhall language
1845    * This is technically a breaking change, but is extremely unlikely to affect
1846      you program.  This only changes the behavior of old programs that had an
1847      expression of the form:
1848
1849      ```
1850      /some/imported/function as Text
1851      ```
1852
1853      ... where `/some/imported/function` is an imported function being applied
1854      to two arguments, the first of which is a bound variable named `as` and
1855      the second of which is the type `Text`
1856    * This is not a breaking change to the Dhall library API
1857* BREAKING CHANGE: Add support for importing environment variables using
1858  `env:VAR` syntax
1859    * This is a breaking change to the Dhall library API since it adds a new
1860      `Path` constructor
1861    * This also technically a breaking change to the Dhall language but
1862      extremely unlikely to affect your program.  This only changes the behavior
1863      of old programs that had an expression of the form:
1864
1865      ```
1866      env:VAR
1867      ```
1868
1869      ... where `env` was the name of a bound variable and `:VAR` was a type
1870      annotation without spaces around the type annotation operator
1871
1872      After this change the program would be interpreted as an import of the
1873      contents for the environment variable named `VAR`
1874* BREAKING CHANGE: Support importing paths relative to home directory using
1875  `~/some/path` syntax
1876    * This is a breaking change to the Dhall library API since it adds a new
1877      field to the `File` constructor indicating whether or not the imported
1878      path is relative to the home directory
1879    * This is not a breaking change to the Dhall language and the new syntax
1880      does not override any old syntax
1881* Permit trailing commas and bars in record/union syntax
1882* Improve location information for parsing errors
1883
18841.1.0
1885
1886* BREAKING CHANGE: Non-empty lists no longer require a type annotation
1887    * This is a breaking change to the Haskell library, not the Dhall language
1888    * This change does not break existing Dhall programs
1889    * The `Expr` type was modified in a non-backwards-compatible way
1890* Add new `exprA` parser
1891* Add new `InvalidType` exception if `input` fails on an invalid `Type`
1892* Improve documentation and tutorial
1893
18941.0.2
1895
1896* Add support for Nix-style "double single-quote" multi-line string literals
1897* Add `isNormalized`
1898* Improve documentation and tutorial
1899* Build against wider range of `http-client` versions
1900
19011.0.1
1902
1903* Initial release
1904
19051.0.0
1906
1907* Accidental premature upload to Hackage.  This release was blacklisted
1908