dhall
A configuration language guaranteed to terminate
Version on this page: | 1.19.1@rev:1 |
LTS Haskell 22.43: | 1.42.1@rev:1 |
Stackage Nightly 2023-12-26: | 1.42.1 |
Latest on Hackage: | 1.42.1@rev:1 |
dhall-1.19.1@sha256:efbaf53b049f26fbb9f70376606027e6beab93521af84643765a854f6b2370a4,22668
Dhall is an explicitly typed configuration language that is not Turing complete. Despite being Turing incomplete, Dhall is a real programming language with a type-checker and evaluator.
Use this library to parse, type-check, evaluate, and pretty-print the Dhall configuration language. This package also includes an executable which type-checks a Dhall file and reduces the file to a fully evaluated normal form.
Read Dhall.Tutorial
to learn how to use this library
Changes
1.19.1
- BUG FIX: Fix serious
dhall lint
bugdhall lint
would sometimes removelet
expressions that were still in use- See: https://github.com/dhall-lang/dhall-haskell/pull/703
- BUG FIX: Fix import caching efficiency bug
- Some imports were being wastefully fetched multiple times
- See: https://github.com/dhall-lang/dhall-haskell/pull/702
- Feature: Generate dot graph to visualize import graph
- Use the
dhall resolve --dot
command - See: https://github.com/dhall-lang/dhall-haskell/pull/698
- See: https://github.com/dhall-lang/dhall-haskell/pull/713
- Use the
- Improve HTTP error messages
1.19.0
- Supports version 4.0.0 of the language standard
- BREAKING CHANGE TO THE LANGUAGE AND API: Prevent Hurkens’ paradox
- This fixes a type-checking soundness bug which permitted infinite loops
- This is a breaking change because infinite loops are no longer possible
- This is also a breaking change because a record of types is now treated as a kind instead of a type
- See: https://github.com/dhall-lang/dhall-haskell/pull/680
- BREAKING CHANGE TO THE LANGUAGE AND API:
Double
s are now double-precision floating point numbers- This restricts the range of
Double
s to IEEE 754 double-precision floating point - This also implies that you can no longer convert
Scientific
values toDhall
expressions (i.e. noInject
instance forScientific
) - See: https://github.com/dhall-lang/dhall-haskell/pull/667
- This restricts the range of
- BREAKING CHANGE TO THE API: Preserve field order for record projection
- The API uses a new
Dhall.Set.Set
type instead ofData.Set.Set
- See: https://github.com/dhall-lang/dhall-haskell/pull/670
- The API uses a new
- BREAKING CHANGE TO THE API: Add support for multi-
let
expressions- This changes the
Let
constructor to now support storing multiple bindings perlet
expression - See: https://github.com/dhall-lang/dhall-haskell/pull/675
- This changes the
- Access constructors as if they were fields of the union type
- In other words:
< Left : Bool | Right : Natural >.Left
- See: https://github.com/dhall-lang/dhall-haskell/pull/657
- In other words:
- Support GHC 8.6
- Add support for quoted path components
- i.e.
/"foo"/bar/"baz qux"
orhttps://example.com/foo/"bar?baz"?qux
- See: https://github.com/dhall-lang/dhall-haskell/pull/690
- i.e.
- Fix parsing of
//\\
operator - Preserve Unicode characters when formatting code
- Allow identifier names to begin with
Some
- Add
subExpressions
Traversal
- Add
normalizeWithM
for monadic normalization - Custom normalizers now take precedence over default normalization logic
- This allows one to override the implementation of built-in operators
- See: https://github.com/dhall-lang/dhall-haskell/pull/684
1.18.0
- Supports version 3.0.0 of the language standard:
- BREAKING CHANGE TO THE LANGUAGE AND API: New
Some
/None
constructors forOptional
values- Example:
[ Some 1, None Natural ]
- This is a breaking change to the language because
Some
andNone
are now reserved keywords - This is a breaking change to the API because
Some
andNone
are new constructors for theExpr
type
- Example:
- BREAKING CHANGE TO THE LANGUAGE AND API: Support for kind polymorphism
- This adds a new
Sort
constant aboveKind
in the hierarchy - i.e.
Type : Kind : Sort
- This is a breaking change to the language because
Sort
is now a reserved keyword - This is a breaking change to the API because
Sort
is a new constructor for theExpr
type
- This adds a new
- BREAKING CHANGE TO THE API: New
Dhall.Map
module- This replaces
InsOrdHashMap
in the API - The primary motivation is to improve performance and to remove the
dependency on
insert-ordered-containers
- This replaces
- BREAKING CHANGE TO THE API: Use standard version instead of protocol version
- The binary protocol is now versioned alongside the standard
- The
ProtocolVersion
type is renamed toStandardVersion
and the --protocol-version
option is renamed to--standard-version
- See: https://github.com/dhall-lang/dhall-haskell/pull/634
- BUG FIX: Fix import chaining for custom header imports
- BUG FIX: Fix import chaining for imports protected by semantic integrity checks
- BUG FIX: Record literals and types produced by
∧
/⫽
/⩓
are now sorted- This ensures that β-normalization is idempotent
- See: https://github.com/dhall-lang/dhall-haskell/pull/572
- BUG FIX:
dhall freeze
now correctly handles the starting file being located outside the current working directory - BUG FIX: Fix parsing of IPv4-mapped IPv6 addresses
- FEATURE: New
--ascii
flag for ASCII output - FEATURE: New
dhall encode
anddhall decode
subcommands- These allow you to transform Dhall source code to and from its binary representation
- See: https://github.com/dhall-lang/dhall-haskell/pull/588
- LARGE parsing performance improvements
- Parsing is about 10x-100x faster on most code
- See: https://github.com/dhall-lang/dhall-haskell/pull/591
- See: https://github.com/dhall-lang/dhall-haskell/pull/592
- See: https://github.com/dhall-lang/dhall-haskell/pull/597
- See: https://github.com/dhall-lang/dhall-haskell/pull/601
- See: https://github.com/dhall-lang/dhall-haskell/pull/602
- See: https://github.com/dhall-lang/dhall-haskell/pull/604
- See: https://github.com/dhall-lang/dhall-haskell/pull/606
- Type-checking performance improvements:
- Normalization performance improvements:
dhall freeze
now caches the imports as it freezes themdhall freeze
now refreezes imports with invalid semantic integrity checksdhall freeze
now adds a trailing newline- Build against
megaparsec-7.0.*
- Support GHC 8.6
- Support GHC all the way back to 7.10.3
- Improvements to error messages:
1.17.0
- This release corresponds to version 2.0.0 of the language standard
- BREAKING CHANGE TO THE LANGUAGE AND API: Binary serialization support
- This is a breaking change to the hash for all semantic integrity checks
- The hash used by the semantic integrity check is now based on the binary representation instead of a text representation of the expression
- You can pin the new hashes by supplying the
--protocol-version 1.0
option on the command line until you need support for newer language features - This also includes a breaking change to
ImportType
in the API
- BREAKING CHANGE TO THE LANGUAGE: Disallow combining records of terms and
types
- This is mainly for consistency and to improve type errors that would have otherwise happened further downstream
- This should not affect the vast majority of code
- See: https://github.com/dhall-lang/dhall-haskell/pull/538
- BUG FIX: Semantic integrity checks now work for imported expression using
the
constructors
keyword - BUG FIX: Fix α-normalization of expressions with bound variables named
_
- BUG FIX: Fix
isNormalized
to matchnormalize
- BUG FIX:
dhall lint
now correctly handles nestedlet
expressions - FEATURE: Imports protected by a semantic integrity check are now cached
- The default
dhall
command no longer outputs the type tostderr
- You can add back the type as a type annotation using the
--annotate
switch - See: https://github.com/dhall-lang/dhall-haskell/pull/544
- You can add back the type as a type annotation using the
- New utilities for building
InputTypes
- Improve parsing performance for long variable names
- More succinct type diffs for function types
- Identifier names can now begin with keywords
- i.e.
ifChanged
andlettuce
are now legal identifiers - See: https://github.com/dhall-lang/dhall-haskell/pull/551
- i.e.
1.16.1
- Fix test failure due to missing test data file
1.16.0
- BREAKING CHANGE: Consolidate
input
family of functions- These now take a record of options
- This also
_stack
field of theStatus
type from[Import]
toNonEmpty Import
- Permit
$
in quoted variable names
1.15.1
- Fix infinite loop when formatting expressions containing
?
1.15.0
- BREAKING CHANGE TO THE API: Support alternative imports using new
?
operator- This adds a new constructor which affects exhaustive pattern matches
- See: https://github.com/dhall-lang/dhall-haskell/pull/473
- BREAKING CHANGE TO THE API: Add
Integer/toDouble
built-in function- This adds a new constructor which affects exhaustive pattern matches
- See: https://github.com/dhall-lang/dhall-haskell/pull/434
- BREAKING CHANGE TO THE API: Use strict
Text
instead of lazyText
- BREAKING CHANGE TO THE API: Remove
Buildable
in favor ofPretty
- BREAKING CHANGE TO THE API: Removed the
Parent
constructor fromFilePrefix
- Instead, use
Here
with a".."
prefix. - See: https://github.com/dhall-lang/dhall-haskell/pull/407
- Instead, use
- BUG FIX: Disallow duplicate fields in records
- BUG FIX: Fix stripping of leading whitespace in multi-line strings
- BUG FIX: Fix formatting field access of an import
- Add
dhall freeze
command - Add
dhall diff
command - Add
dhall lint
command - Change
dhall-repl
/dhall-hash
/dhall-format
todhall
subcommands- i.e.
dhall repl
/dhall hash
/dhall format
- See: https://github.com/dhall-lang/dhall-haskell/pull/435
- See: https://github.com/dhall-lang/dhall-haskell/pull/452
- i.e.
- Add
with-http
cabal flag to disable support for remote imports - Added
inputFrom
andinputFromWith
- These allow naming the file that the expression is coming from for better error messages
- See: https://github.com/dhall-lang/dhall-haskell/pull/464
- Performance improvements
- Tutorial recommends GitHub for Prelude instead of IPFS
- Pretty-print expressions in type errors
- Formatting improvements
- Diff improvements
1.14.0
- BREAKING CHANGE TO THE LANGUAGE: Switch grammar of
Natural
andInteger
Natural
number literals are now unsigned andInteger
literals always require a sign- This is a VERY disruptive change to most Dhall code in the wild but was unanimously agreed upon here: https://github.com/dhall-lang/dhall-lang/issues/138
- See also: https://github.com/dhall-lang/dhall-haskell/pull/381
- BREAKING CHANGE TO THE LANGUAGE: Drop support for importing directories
- Importing
dir/
used to resolve todir/@
, which is no longer supported - See: https://github.com/dhall-lang/dhall-haskell/pull/384
- Importing
- BREAKING CHANGE TO THE LANGUAGE: Change to the grammar for imports
- File path components can no longer contain
#
or?
characters - URL imports must now contain at least one path component
- URL path components must match the grammar for file path components
- See: https://github.com/dhall-lang/dhall-haskell/pull/390
- File path components can no longer contain
- BREAKING CHANGE TO THE API: Rename
Path{,Mode,Hashed,Type}
toImport{,Mode,Hashed,Type}
- In practice this change is not breaking for the most common use cases
since this also provides a
Path
type synonym for backwards compatibility - See: https://github.com/dhall-lang/dhall-haskell/pull/376
- In practice this change is not breaking for the most common use cases
since this also provides a
- BUG FIX: Fix α-equivalence bug when type-checking
merge
merge
expressions would sometimes reject valid code due to a type-checking bug- See: https://github.com/dhall-lang/dhall-haskell/pull/394
- Improve import caching
- Increase upper bound on
tasty
- Fix lower bound on
insert-ordered-containers
1.13.1
- Increase upper bound on
ansi-terminal
andmegaparsec
1.13.0
- BUG FIX: Fix semantic integrity hashing support
- Both parsing and pretty-printing semantic hashes were broken since version 1.11.0
- See: https://github.com/dhall-lang/dhall-haskell/pull/345
- BUG FIX: Allow leading whitespace in interpolated expresssions
- BUG FIX: Fix
deriving (Interpret)
for sum types- The types of alternatives were not correctly included in the corresponding Dhall type
- See: https://github.com/dhall-lang/dhall-haskell/pull/348
- BREAKING CHANGE TO LANGUAGE: Records cannot store both types and terms
- Records can also not store type-level functions (like
List
)- Records might be allowed to store type-level functions again in the future
- This fixes a potential soundness bug
- The primarily practical consequence of this change is that if you are hosting a “package” then you will need to split terms and types from your package into different records for your users to import
- This also implies removing the
./Monoid
type-level function from the./Prelude/package.dhall
record - See: https://github.com/dhall-lang/dhall-haskell/pull/335
- Records can also not store type-level functions (like
- BREAKING CHANGE TO THE API: Replace
trifecta
withmegaparsec
- This change the API to use the
Parser
type frommegaparsec
- This also slightly changes the type of
exprFromText
- If you program using the type classes provided by the
parsers
library then this is not a breaking change as that interface is preserved - See: https://github.com/dhall-lang/dhall-haskell/pull/268
- This change the API to use the
- BREAKING CHANGE TO THE API: New
⩓
operator for merging record types- Example:
{ foo : Text } ⩓ { bar : Bool } = { foo : Text, bar : Bool }
- This is breaking because it adds a new constructor to the
Expr
type - See: https://github.com/dhall-lang/dhall-haskell/pull/342
- Example:
- BREAKING CHANGE TO THE API: New support for projecting a subset of fields
- Example:
{ x = 1, y = 2, z = 3 }.{ x, y } = { x = 1, y = 2 }
- This is breaking because it adds a new constructor to the
Expr
type - See: https://github.com/dhall-lang/dhall-haskell/pull/350
- Example:
- API+UX feature: New support for pretty-printing diffs of Dhall expressions
- Error messages also use this feature to simplify large type mismatches
- There is also a new
Dhall.Diff
module - See: https://github.com/dhall-lang/dhall-haskell/pull/336
- Add
version
,resolve
,type
, andnormalize
sub-commands to interpreter - Support GHC 7.10.3
:type
command indhall-repl
now only displays the type- Before it would also display the original expression
- See: https://github.com/dhall-lang/dhall-haskell/pull/344
- Trim dependency tree
1.12.0
- Additional changes to support GHC 8.4
- BREAKING CHANGE TO API: Replace dependency on
text-format
withformatting
- This replace the
Data.Text.Buildable.Buildable
instances withFormatting.Buildable.Buildable
instances, which is why this is a breaking change text-format
is no longer maintained and blocking GHC 8.4 support- See: https://github.com/dhall-lang/dhall-haskell/pull/330
- This replace the
1.11.1
- Support GHC 8.4
- Fix α-normalization bug
- Note that this is not a type-checking bug. This only affects users who
were directly using the
alphaNormalize
function from the Haskell API becauselet
expressions were not correctly α-normalized - See: https://github.com/dhall-lang/dhall-haskell/pull/319
- Note that this is not a type-checking bug. This only affects users who
were directly using the
- Slight tweak to syntax highlighting
- Increase upper bound on
ansi-terminal
andexceptions
1.11.0
- BREAKING CHANGE TO THE API: Fix
{Natural,Optional,List}/build
semantics to match standard- This is a breaking change because the
OptionalLit
andListLit
constructors changed their representations to efficiently support the standard semantics ListLit
now stores aData.Sequence.Seq
instead of aData.Vector.Vector
OptionalLit
now stores aMaybe
instead of aData.Vector.Vector
- See: https://github.com/dhall-lang/dhall-haskell/pull/300
- This is a breaking change because the
- BREAKING CHANGE TO THE COMMAND LINE:
dhall
executable always formats output- Previously you had to opt into formatting using
--pretty
- Now formatting is obligatory and the
--pretty
flag is gone - See: https://github.com/dhall-lang/dhall-haskell/pull/303
- Previously you had to opt into formatting using
- Feature: New
:save
command fordhall-repl
- Now you can save an expression to a file:
./yourFile = someExpression
- See: https://github.com/dhall-lang/dhall-haskell/pull/309
- Now you can save an expression to a file:
- Improvement: Add new simplifications to match standard
- Improvement: Fix equivalence check to match standard
- Practically this means that more corner cases of the language correctly type-check than before
- Improvement: New
--plain
flag to disable syntax highlighting - Improvement: Prelude now provides an umbrella
package.dhall
import- This is primarily for convenience
- See: https://github.com/dhall-lang/dhall-haskell/pull/298
- Improvement: Context is now normalized
- Replace
cryptohash
dependency withcryptonite
- Increase upper bound on exceptions
- Fix type error in tutorial
1.10.0
- Feature: Records/unions can now have fields/alternatives that are types
- i.e.
{ foo = Text, bar = List }
is legal now - See: https://github.com/dhall-lang/dhall-haskell/pull/273
- i.e.
- Feature: New
dhall-repl
for interactively evaluating Dhall expressions - Feature: Syntax highlighting
- Feature: BREAKING CHANGE TO THE API:
dhall-format
preserves field order- This changes the syntax tree to use an
InsOrdHashMap
instead of aMap
- This changes the syntax tree to use an
- BREAKING CHANGE TO THE API: Use Haskell’s
Scientific
type- This is fixes the interpreter to correct handle really large/small numbers
- This also allows marshaling into Haskell’s
Scientific
type - See: https://github.com/dhall-lang/dhall-haskell/pull/256
- BREAKING CHANGE TO THE API: Remove
system-filepath
/system-fileio
dependencies- Now the library uses
Prelude.FilePath
- See: https://github.com/dhall-lang/dhall-haskell/pull/248
- Now the library uses
- Feature: Labels can now begin with reserved names
- i.e.
List/map
is now a legal label - See: https://github.com/dhall-lang/dhall-haskell/pull/255
- i.e.
- Fix: Rendered labels are now correctly escaped if they are numbers
- Add the instance
Interpret String
. - Fix: Custom contexts passed to
typeWith
are now checked- This prevents a custom context from triggering an infinite loop
- See: https://github.com/dhall-lang/dhall-haskell/pull/259
1.9.1
dhall-format
now emits single-quoted strings for multi-line strings- Improved error messages for list elements with the wrong type
- Change
lens
dependency tolens-family-core
1.9.0
- Feature: BREAKING CHANGE TO LANGUAGE AND API: Add
constructors
keyword- This new keyword generates constructors from a union type
- See the updated Haskell tutorial for more details
- This means that
constructors
is now a reserved keyword - This adds a new
Constructors
constructor to theExpr
type - See: https://github.com/dhall-lang/dhall-haskell/pull/199
- This new keyword generates constructors from a union type
- Feature: BREAKING CHANGE TO THE API:
dhall-format
preserves interpolation- This changes the
TextLit
constructor to represent an interpolatedText
literal - See: https://github.com/dhall-lang/dhall-haskell/pull/220
- This changes the
- Feature: You can now define type synonyms using
let
- Feature: Extend valid set of quoted labels
- Performance: Improve startup time when importing files, but not URLs
- Security:
localhost
/127.0.0.1
imports no longer count as local imports- Specifically: they cannot import environment variables or files
- See: https://github.com/dhall-lang/dhall-haskell/pull/197
- Security: Fix potential type-checking bug
- Fix: BREAKING CHANGE TO API: Improve localization of error messages
- This required fixing the type of
normalize
/shift
/subst
to preserve the first type parameter ofExpr
(i.e. they no longer deleteNote
constructors) - A new
denote
function was added for the explicit purpose of deletingNote
constructors - See: https://github.com/dhall-lang/dhall-haskell/pull/218
- This required fixing the type of
- Expose
MissingEnvironmentVariable
exception type - Add
genericAuto
- Add
inputWith
- Add
loadWithContext
- Add
pair
/unit
/string
/list
1.8.2
- Add
typeWithA
for type-checking customEmbed
ded values - Fix
dhall{,-*}
executables to ignore ambient locale and use UTF8 - Increase upper bound on
tasty
dependency
1.8.1
dhall
executable can now format output using--pretty
- Improved Unicode suppport on Windows
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 namedsha256
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
andList/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 >
- i.e.
- 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
- This is a breaking change because this changes the type of
- 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
andInterpret
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 forSrc
1.5.1
- Increase upper bound on
vector
andoptparse-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
- This is a breaking change because it adds a new constructor to the
- BREAKING CHANGE: Add
Interpret
support for lazyText
- This is a breaking change because it renames
text
tostrictText
- This is a breaking change because it renames
- 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 theExpr
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
- This is a breaking change to the language because this adds a new reserved
- 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 mergeOptional/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 thedhall
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 theauto
method with a more generalautoWith
method. ThisautoWith
now takes anInterpretOptions
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
- This is a breaking change to the Dhall library API since this changes the
signature of the
- 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
andOptional
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 addingas 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 namedas
and the second of which is the typeText
-
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 operatorAfter 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
- This is a breaking change to the Dhall library API since it adds a new
field to the
- 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 ifinput
fails on an invalidType
- 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