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