ref: 3dae10e1594374c8a64de89ce83278a1822e7758 dhall-ruby/lib/dhall d---------
implement as Location and use URI internally
Record projection by expression / type
Do not commute multiplication when normalizing
Self-describe CBOR for Expression#to_binary

CBOR.encode(expression) and Expression#to_cbor remain untagged "standard
Dhall" but the default Expression#to_binary now always tags the output
with self-describe CBOR.  This is supported by the standard for decoding
the output will still be compatible with all compliant implementations,
and it makes the binary format easier to identify in the wild.
Headers is probably a Dhall::List

But we map it to strings... just use `to_a` since we're not staing in
Dhall-land anyway.
A whitespace-only last line is still an indent
Fix for #join on empty list
Do not commute generally

The operator is commutative, but that doesn't mean x == False should
become False == x upon normalization.
Update to latest dhall-lang

* Allow selection from union Kind or Sort
* End of line is always \n (for multiline test case)
* Multiline of only blank lines should not error
Switch IntegrityCheck encoding to multihash
Split IntegrityCheck and NoIntegrityCheck
Split IntegrityCheck and NoIntegrityCheck
Refactor builtins

The fill/unfill code is much simpler now
IntegrityCheck stores raw hash internally
Decode unions the same way as_dhall makes them
Use Dhall names for everything that encodes untagged
Disambiguate hoisted union tags properly

An array may contain two nomnatively-equivalent types who are
structurally different -- so they need different (but related) union
tags since they will not share a type.
Enum should not have itself in the alts