## Changelog for dhall-1.8.1

1.8.1

1.8.0

• BREAKING CHANGE TO LANGUAGE: Add support for import integrity checks
• In practice, the likelihood of this breaking code in the wild is astronomically low
• This would only break code of the form sha256:aaa...aaa (i.e. a variabled named sha256 with a type annotation for a type with a name 64 characters long drawn from the first 6 characters of the alphabet)
• BUG FIX: Fix parsing of single quotes in single-quoted strings
• BUG FIX: Fix superfluous parentheses introduced by dhall-format
• New dhall-hash executable
• This goes hand-in-hand with the added support for integrity checks since the executable lets you compute the current hash of an import

1.7.0

• BREAKING CHANGE TO LANGUAGE: Update parser to match standardized grammar
• Trailing commas and bars no longer supported for union and record literals
• Paths no longer permit commas
• URL grammar is now RFC-compliant
• Environment variables can now be quoted to support full range of POSIX-compliant names
• Text literals support full set of JSON escape sequences (such as \u2192)
• BREAKING CHANGE TO LANGUAGE: Single quoted strings strip leading newlines
• BUG FIX: Fixed type-checking infinite loops due to non-type-checked variables in context
• BUG FIX: Fixed type-checking bug due to missing context when type-checking certain expressions
• BUG FIX: Fixed type-checking bug due to off-by-one errors in name shadowing logic
• New dhall-format executable to automatically format code
• Performance optimizations to Natural/fold and List/fold
• Improved parsing performance (over 3x faster)
• Union literals can now specify the set value anywhere in the literal
• i.e. < A : Integer | B = False | C : Text >
• New Inject instance for ()
• Several tutorial fixes and improvements

1.6.0

• BREAKING CHANGE TO THE API: Drop support for GHC 7.*
• BREAKING CHANGE TO THE API: Add support for customizing Dhall import
• This is a breaking change because this changes the type of loadWith
• BREAKING CHANGE TO THE API: Add field to UnboundVariable error containing
• BUG FIX: Fix parsing single quotes in string literals the name of the unbound variable
• Add List/concatMap to the Prelude
• You can now derive Inject and Interpret for types with unlabeled fields
• Add new instances for Interpret:
• []
• (,)
• Add new instance for Inject
• [], Data.Set.Set, Data.Sequence.Seq
• (,)
• Int, Word8, Word16, Word32, Word64
• Add Eq instance for Src

1.5.1

• Increase upper bound on vector and optparse-generic

1.5.0

• BREAKING CHANGE: Add list concatenation operator: (#)
• This is a breaking change because it adds a new constructor to the Expr type which breaks exhaustive pattern matches
• BREAKING CHANGE: Add Interpret support for lazy Text
• This is a breaking change because it renames text to strictText
• Add Interpret instance for decoding (a limited subset of) Dhall functions
• Dhall no longer requires Template Haskell to compile
• This helps with cross-compilation
• Add rawInput utility for decoding a Haskell value from the Expr type
• Add loadWith/normalizeWith utilities for normalizing/importing modules with a custom context
• Export Type constructor

1.4.2

• Fix missing Prelude files in package archive uploaded to Hackage

1.4.1

• Fix missing tests/Tutorial.hs module in package archive uploaded to Hackage

1.4.0

• BREAKING CHANGE TO THE LANGUAGE AND API: You can now supply custom headers for URL imports with the new using keyword
• This is a breaking change to the language because this adds a new reserved using keyword
• This is a breaking change to the API because this adds a new field to the URL constructor to store optional custom headers
• BUG FIX: : is no longer a disallowed path character
• This was breaking URL imports with a port
• BUG FIX: If you import a home-anchored path (i.e. ~/foo) and that imports a relative path (like ./bar), then the canonical path of the relative import should be home-anchored (i.e. ~/bar). However, there was a bug that made lose the home anchor (i.e. ./foo/bar), which this release fixes likely fail due to no longer being home-anchored (i.e. ./foob
• Add support for string interpolation
• merge no longer requires a type annotation if you are merging at least one alternative
• Expanded Prelude
• ./Prelude/Optional/all
• ./Prelude/Optional/any
• ./Prelude/Optional/filter
• ./Prelude/Optional/length
• ./Prelude/Optional/null
• ./Prelude/Text/concatMap
• ./Prelude/Text/concatMapSep
• ./Prelude/Text/concatSep
• Rearrange detailed error messages to put summary information at the bottom of the message

1.3.0

• BREAKING CHANGE TO THE API: Add support for new primitives, specifically:
• (//) - Right-biased and shallow record merge
• Optional/build (now a built-in in order to support build/fold fusion)
• Natural/show
• Integer/show
• Double/show
• Natural/toInteger
• These all add new constructors to the Expr type, which would break exhaustive pattern matches
• BREAKING CHANGE TO THE LANGUAGE: Imported paths and URLs no longer support the characters: "()[]{}<>:"
• This reduces the number of cases where you have to add a space after imports
• Note that this does not exclude the : in the URL scheme (i.e. http://)
• Increase connection timeout for imports
• Variable names now allow the - character for all but the first character
• You can now escape identifiers with backticks
• This lets you name identifiers so that they don't conflict with reserved key words
• This is most useful when converting Dhall to other file formats (like JSON) where you might need to emit a field that conflicts with one of Dhall's reserved keywords
• New --version flag for the dhall executable

1.2.0

• BREAKING CHANGE: Add support for customizing derived Interpret instances
• This is a breaking change to the Dhall library API since this changes the signature of the Interpret class by replacing the auto method with a more general autoWith method. This autoWith now takes an InterpretOptions argument that lets you customize derived field and constuctor names
• In practice user programs that use the common path will be unaffected by this change
• This is not a breaking change to the Dhall language
• BREAKING CHANGE: Type annotations now bind more tightly than lambda abstraction
• This is a breaking change to the Dhall language. An expression like this:

λ(x : A) → y : B


... used to parenthesized implicitly as:

(λ(x : A) → y) : T


... but is now parenthesized implicitly as:

λ(x : A) → (y : T)


This is now consistent with Haskell's precedence and also consistent with the precedence of List and Optional type annotations

• This change affects programs with an expression like this:

-- Assuming that y : B
λ(x : A) → y : A → B


The above program would type-check before this change but not type-check after this change. You would you need to fix the above program by either changing the type signature to annotate just the type of y like this:

λ(x : A) → y : B


... or by adding explicit parentheses like this:

(λ(x : A) → y) : A → B

• This is not a breaking change to the Dhall library API

• BREAKING CHANGE: Add support for importing a path's contents as raw Text by adding as Text after the import
• This is a breaking change to the Dhall language

• This is technically a breaking change, but is extremely unlikely to affect you program. This only changes the behavior of old programs that had an expression of the form:

/some/imported/function as Text


... where /some/imported/function is an imported function being applied to two arguments, the first of which is a bound variable named as and the second of which is the type Text

• This is not a breaking change to the Dhall library API

• BREAKING CHANGE: Add support for importing environment variables using env:VAR syntax
• This is a breaking change to the Dhall library API since it adds a new Path constructor

• This also technically a breaking change to the Dhall language but extremely unlikely to affect your program. This only changes the behavior of old programs that had an expression of the form:

env:VAR


... where env was the name of a bound variable and :VAR was a type annotation without spaces around the type annotation operator

After this change the program would be interpreted as an import of the contents for the environment variable named VAR

• BREAKING CHANGE: Support importing paths relative to home directory using ~/some/path syntax
• This is a breaking change to the Dhall library API since it adds a new field to the File constructor indicating whether or not the imported path is relative to the home directory
• This is not a breaking change to the Dhall language and the new syntax does not override any old syntax
• Permit trailing commas and bars in record/union syntax
• Improve location information for parsing errors

1.1.0

• BREAKING CHANGE: Non-empty lists no longer require a type annotation
• This is a breaking change to the Haskell library, not the Dhall language
• This change does not break existing Dhall programs
• The Expr type was modified in a non-backwards-compatible way
• Add new exprA parser
• Add new InvalidType exception if input fails on an invalid Type
• Improve documentation and tutorial

1.0.2

• Add support for Nix-style "double single-quote" multi-line string literals
• Add isNormalized
• Improve documentation and tutorial
• Build against wider range of http-client` versions

1.0.1

• Initial release

1.0.0

• Accidental premature upload to Hackage. This release was blacklisted