diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,26 @@
+1.40.0
+
+* [Almost supports version 20.2.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v20.2.0)
+    * The main thing that is missing is support for the `headers.dhall` file
+    * [BREAKING CHANGE TO THE LANGUAGE: Add support for `Date` / `Time` / `TimeZone` ](https://github.com/dhall-lang/dhall-haskell/pull/2247)
+        * This is a breaking change because `Date`, `Time`, and `TimeZone` are
+          now reserved identifiers
+    * [Improved fallback behavior for `?`](https://github.com/dhall-lang/dhall-haskell/pull/2203)
+* [BREAKING CHANGE TO THE LANGUAGE: Require whitespace before `with`](https://github.com/dhall-lang/dhall-haskell/pull/2213)
+    * The parser now requires whitespace before the `with` keyword, which brings
+      the Haskell implementation into closer compliance with the standard
+    * In practice this is a technically breaking change which will not affect
+      most programs
+* [New `FromDhall` instances for `Predicate`, `Equivalence`, and `Op`](https://github.com/dhall-lang/dhall-haskell/pull/2278)
+* [`dhall lint` will now sort `let` bindings with imports](https://github.com/dhall-lang/dhall-haskell/pull/2205)
+    * `dhall lint` now reorders `let` bindings to move imports to the top so
+      long as doing so does not change the behavior of the program
+* Fixes and improvements to code formatting
+    * [#2280](https://github.com/dhall-lang/dhall-haskell/pull/2280)
+* Fixes and improvements to error messages
+    * [#2244](https://github.com/dhall-lang/dhall-haskell/pull/2244)
+    * [#2238](https://github.com/dhall-lang/dhall-haskell/pull/2238)
+
 1.39.0
 
 * [Supports version 20.2.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v20.2.0)
diff --git a/dhall-lang/Prelude/Bool/and b/dhall-lang/Prelude/Bool/and
--- a/dhall-lang/Prelude/Bool/and
+++ b/dhall-lang/Prelude/Bool/and
@@ -1,2 +1,3 @@
-  ./and.dhall sha256:0b2114fa33cd76652e4360f012bc082718944fe4c5b28c975483178f8d9b0a6d
+  ./and.dhall
+    sha256:0b2114fa33cd76652e4360f012bc082718944fe4c5b28c975483178f8d9b0a6d
 ? ./and.dhall
diff --git a/dhall-lang/Prelude/Bool/build b/dhall-lang/Prelude/Bool/build
--- a/dhall-lang/Prelude/Bool/build
+++ b/dhall-lang/Prelude/Bool/build
@@ -1,2 +1,3 @@
-  ./build.dhall sha256:add7cb9acacac705410088d876a7e4488e046a7aded304f06c51accffd7f1b7b
+  ./build.dhall
+    sha256:add7cb9acacac705410088d876a7e4488e046a7aded304f06c51accffd7f1b7b
 ? ./build.dhall
diff --git a/dhall-lang/Prelude/Bool/even b/dhall-lang/Prelude/Bool/even
--- a/dhall-lang/Prelude/Bool/even
+++ b/dhall-lang/Prelude/Bool/even
@@ -1,2 +1,3 @@
-  ./even.dhall sha256:72a05ee550636a3acb768360fa51ba0db0326763e0cf1ceb737f0f3607fc0fe5
+  ./even.dhall
+    sha256:72a05ee550636a3acb768360fa51ba0db0326763e0cf1ceb737f0f3607fc0fe5
 ? ./even.dhall
diff --git a/dhall-lang/Prelude/Bool/fold b/dhall-lang/Prelude/Bool/fold
--- a/dhall-lang/Prelude/Bool/fold
+++ b/dhall-lang/Prelude/Bool/fold
@@ -1,2 +1,3 @@
-  ./fold.dhall sha256:39f60baf3950268c2e849e91dc6279ee41cd6b81892d54020d4fcd2ce30a96ae
+  ./fold.dhall
+    sha256:39f60baf3950268c2e849e91dc6279ee41cd6b81892d54020d4fcd2ce30a96ae
 ? ./fold.dhall
diff --git a/dhall-lang/Prelude/Bool/not b/dhall-lang/Prelude/Bool/not
--- a/dhall-lang/Prelude/Bool/not
+++ b/dhall-lang/Prelude/Bool/not
@@ -1,2 +1,3 @@
-  ./not.dhall sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4
+  ./not.dhall
+    sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4
 ? ./not.dhall
diff --git a/dhall-lang/Prelude/Bool/odd b/dhall-lang/Prelude/Bool/odd
--- a/dhall-lang/Prelude/Bool/odd
+++ b/dhall-lang/Prelude/Bool/odd
@@ -1,2 +1,3 @@
-  ./odd.dhall sha256:6360fca3a745de32bd186cc7b71487a6398cd47d5119064eae491872c41d1999
+  ./odd.dhall
+    sha256:6360fca3a745de32bd186cc7b71487a6398cd47d5119064eae491872c41d1999
 ? ./odd.dhall
diff --git a/dhall-lang/Prelude/Bool/or b/dhall-lang/Prelude/Bool/or
--- a/dhall-lang/Prelude/Bool/or
+++ b/dhall-lang/Prelude/Bool/or
@@ -1,2 +1,3 @@
-  ./or.dhall sha256:5c50738e84e1c4fed8343ebd57608500e1b61ac1f502aa52d6d6edb5c20b99e4
+  ./or.dhall
+    sha256:5c50738e84e1c4fed8343ebd57608500e1b61ac1f502aa52d6d6edb5c20b99e4
 ? ./or.dhall
diff --git a/dhall-lang/Prelude/Bool/package.dhall b/dhall-lang/Prelude/Bool/package.dhall
--- a/dhall-lang/Prelude/Bool/package.dhall
+++ b/dhall-lang/Prelude/Bool/package.dhall
@@ -1,25 +1,33 @@
 { and =
-      ./and.dhall sha256:0b2114fa33cd76652e4360f012bc082718944fe4c5b28c975483178f8d9b0a6d
+      ./and.dhall
+        sha256:0b2114fa33cd76652e4360f012bc082718944fe4c5b28c975483178f8d9b0a6d
     ? ./and.dhall
 , build =
-      ./build.dhall sha256:add7cb9acacac705410088d876a7e4488e046a7aded304f06c51accffd7f1b7b
+      ./build.dhall
+        sha256:add7cb9acacac705410088d876a7e4488e046a7aded304f06c51accffd7f1b7b
     ? ./build.dhall
 , even =
-      ./even.dhall sha256:72a05ee550636a3acb768360fa51ba0db0326763e0cf1ceb737f0f3607fc0fe5
+      ./even.dhall
+        sha256:72a05ee550636a3acb768360fa51ba0db0326763e0cf1ceb737f0f3607fc0fe5
     ? ./even.dhall
 , fold =
-      ./fold.dhall sha256:39f60baf3950268c2e849e91dc6279ee41cd6b81892d54020d4fcd2ce30a96ae
+      ./fold.dhall
+        sha256:39f60baf3950268c2e849e91dc6279ee41cd6b81892d54020d4fcd2ce30a96ae
     ? ./fold.dhall
 , not =
-      ./not.dhall sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4
+      ./not.dhall
+        sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4
     ? ./not.dhall
 , odd =
-      ./odd.dhall sha256:6360fca3a745de32bd186cc7b71487a6398cd47d5119064eae491872c41d1999
+      ./odd.dhall
+        sha256:6360fca3a745de32bd186cc7b71487a6398cd47d5119064eae491872c41d1999
     ? ./odd.dhall
 , or =
-      ./or.dhall sha256:5c50738e84e1c4fed8343ebd57608500e1b61ac1f502aa52d6d6edb5c20b99e4
+      ./or.dhall
+        sha256:5c50738e84e1c4fed8343ebd57608500e1b61ac1f502aa52d6d6edb5c20b99e4
     ? ./or.dhall
 , show =
-      ./show.dhall sha256:f85f6d2d921c37a2122cb2e2f8a0170e305b699debd0e6df5ef3370d806b5f61
+      ./show.dhall
+        sha256:f85f6d2d921c37a2122cb2e2f8a0170e305b699debd0e6df5ef3370d806b5f61
     ? ./show.dhall
 }
diff --git a/dhall-lang/Prelude/Bool/show b/dhall-lang/Prelude/Bool/show
--- a/dhall-lang/Prelude/Bool/show
+++ b/dhall-lang/Prelude/Bool/show
@@ -1,2 +1,3 @@
-  ./show.dhall sha256:f85f6d2d921c37a2122cb2e2f8a0170e305b699debd0e6df5ef3370d806b5f61
+  ./show.dhall
+    sha256:f85f6d2d921c37a2122cb2e2f8a0170e305b699debd0e6df5ef3370d806b5f61
 ? ./show.dhall
diff --git a/dhall-lang/Prelude/Double/package.dhall b/dhall-lang/Prelude/Double/package.dhall
--- a/dhall-lang/Prelude/Double/package.dhall
+++ b/dhall-lang/Prelude/Double/package.dhall
@@ -1,4 +1,5 @@
 { show =
-      ./show.dhall sha256:ae645813cc4d8505a265df4d7564c95482f62bb3e07fc81681959599b6cee04f
+      ./show.dhall
+        sha256:ae645813cc4d8505a265df4d7564c95482f62bb3e07fc81681959599b6cee04f
     ? ./show.dhall
 }
diff --git a/dhall-lang/Prelude/Double/show b/dhall-lang/Prelude/Double/show
--- a/dhall-lang/Prelude/Double/show
+++ b/dhall-lang/Prelude/Double/show
@@ -1,2 +1,3 @@
-  ./show.dhall sha256:ae645813cc4d8505a265df4d7564c95482f62bb3e07fc81681959599b6cee04f
+  ./show.dhall
+    sha256:ae645813cc4d8505a265df4d7564c95482f62bb3e07fc81681959599b6cee04f
 ? ./show.dhall
diff --git a/dhall-lang/Prelude/Function/compose b/dhall-lang/Prelude/Function/compose
--- a/dhall-lang/Prelude/Function/compose
+++ b/dhall-lang/Prelude/Function/compose
@@ -1,2 +1,3 @@
-  ./compose.dhall sha256:65ad8bbea530b3d8968785a7cf4a9a7976b67059aa15e3b61fcba600a40ae013
+  ./compose.dhall
+    sha256:65ad8bbea530b3d8968785a7cf4a9a7976b67059aa15e3b61fcba600a40ae013
 ? ./compose.dhall
diff --git a/dhall-lang/Prelude/Function/identity b/dhall-lang/Prelude/Function/identity
--- a/dhall-lang/Prelude/Function/identity
+++ b/dhall-lang/Prelude/Function/identity
@@ -1,2 +1,3 @@
-  ./identity.dhall sha256:f78b96792b459cb664f41c6119bd8897dd04353a3343521d436cd82ad71cb4d4
+  ./identity.dhall
+    sha256:f78b96792b459cb664f41c6119bd8897dd04353a3343521d436cd82ad71cb4d4
 ? ./identity.dhall
diff --git a/dhall-lang/Prelude/Function/package.dhall b/dhall-lang/Prelude/Function/package.dhall
--- a/dhall-lang/Prelude/Function/package.dhall
+++ b/dhall-lang/Prelude/Function/package.dhall
@@ -1,7 +1,9 @@
 { compose =
-      ./compose.dhall sha256:65ad8bbea530b3d8968785a7cf4a9a7976b67059aa15e3b61fcba600a40ae013
+      ./compose.dhall
+        sha256:65ad8bbea530b3d8968785a7cf4a9a7976b67059aa15e3b61fcba600a40ae013
     ? ./compose.dhall
 , identity =
-      ./identity.dhall sha256:f78b96792b459cb664f41c6119bd8897dd04353a3343521d436cd82ad71cb4d4
+      ./identity.dhall
+        sha256:f78b96792b459cb664f41c6119bd8897dd04353a3343521d436cd82ad71cb4d4
     ? ./identity.dhall
 }
diff --git a/dhall-lang/Prelude/Integer/abs b/dhall-lang/Prelude/Integer/abs
--- a/dhall-lang/Prelude/Integer/abs
+++ b/dhall-lang/Prelude/Integer/abs
@@ -1,2 +1,3 @@
-  ./abs.dhall sha256:35212fcbe1e60cb95b033a4a9c6e45befca4a298aa9919915999d09e69ddced1
+  ./abs.dhall
+    sha256:35212fcbe1e60cb95b033a4a9c6e45befca4a298aa9919915999d09e69ddced1
 ? ./abs.dhall
diff --git a/dhall-lang/Prelude/Integer/add b/dhall-lang/Prelude/Integer/add
--- a/dhall-lang/Prelude/Integer/add
+++ b/dhall-lang/Prelude/Integer/add
@@ -1,2 +1,3 @@
-  ./add.dhall sha256:7da1306a0bf87c5668beead2a1db1b18861e53d7ce1f38057b2964b649f59c3b
+  ./add.dhall
+    sha256:7da1306a0bf87c5668beead2a1db1b18861e53d7ce1f38057b2964b649f59c3b
 ? ./add.dhall
diff --git a/dhall-lang/Prelude/Integer/add.dhall b/dhall-lang/Prelude/Integer/add.dhall
--- a/dhall-lang/Prelude/Integer/add.dhall
+++ b/dhall-lang/Prelude/Integer/add.dhall
@@ -1,6 +1,7 @@
 --| `add m n` computes `m + n`.
 let Integer/subtract =
-        ./subtract.dhall sha256:a34d36272fa8ae4f1ec8b56222fe8dc8a2ec55ec6538b840de0cbe207b006fda
+        ./subtract.dhall
+          sha256:a34d36272fa8ae4f1ec8b56222fe8dc8a2ec55ec6538b840de0cbe207b006fda
       ? ./subtract.dhall
 
 let add
diff --git a/dhall-lang/Prelude/Integer/clamp b/dhall-lang/Prelude/Integer/clamp
--- a/dhall-lang/Prelude/Integer/clamp
+++ b/dhall-lang/Prelude/Integer/clamp
@@ -1,2 +1,3 @@
-  ./clamp.dhall sha256:ea42096cf3e024fadfaf910e0b839005b0ea7514fff11e5a3950a77694d9c5d2
+  ./clamp.dhall
+    sha256:ea42096cf3e024fadfaf910e0b839005b0ea7514fff11e5a3950a77694d9c5d2
 ? ./clamp.dhall
diff --git a/dhall-lang/Prelude/Integer/equal b/dhall-lang/Prelude/Integer/equal
--- a/dhall-lang/Prelude/Integer/equal
+++ b/dhall-lang/Prelude/Integer/equal
@@ -1,2 +1,3 @@
-  ./equal.dhall sha256:2d99a205086aa77eea17ae1dab22c275f3eb007bccdc8d9895b93497ebfc39f8
+  ./equal.dhall
+    sha256:2d99a205086aa77eea17ae1dab22c275f3eb007bccdc8d9895b93497ebfc39f8
 ? ./equal.dhall
diff --git a/dhall-lang/Prelude/Integer/equal.dhall b/dhall-lang/Prelude/Integer/equal.dhall
--- a/dhall-lang/Prelude/Integer/equal.dhall
+++ b/dhall-lang/Prelude/Integer/equal.dhall
@@ -1,6 +1,7 @@
 --| `equal` checks if two Integers are equal.
 let Natural/equal =
-        ../Natural/equal.dhall sha256:7f108edfa35ddc7cebafb24dc073478e93a802e13b5bc3fd22f4768c9b066e60
+        ../Natural/equal.dhall
+          sha256:7f108edfa35ddc7cebafb24dc073478e93a802e13b5bc3fd22f4768c9b066e60
       ? ../Natural/equal.dhall
 
 let equal
diff --git a/dhall-lang/Prelude/Integer/greaterThan b/dhall-lang/Prelude/Integer/greaterThan
--- a/dhall-lang/Prelude/Integer/greaterThan
+++ b/dhall-lang/Prelude/Integer/greaterThan
@@ -1,2 +1,3 @@
-  ./greaterThan.dhall sha256:d23affd73029fc9aaf867c2c7b86510ca2802d3f0d1f3e1d1a93ffd87b7cb64b
+  ./greaterThan.dhall
+    sha256:d23affd73029fc9aaf867c2c7b86510ca2802d3f0d1f3e1d1a93ffd87b7cb64b
 ? ./greaterThan.dhall
diff --git a/dhall-lang/Prelude/Integer/greaterThan.dhall b/dhall-lang/Prelude/Integer/greaterThan.dhall
--- a/dhall-lang/Prelude/Integer/greaterThan.dhall
+++ b/dhall-lang/Prelude/Integer/greaterThan.dhall
@@ -1,10 +1,12 @@
 --| `greaterThan` checks if one Integer is greater than another.
 let Bool/not =
-        ../Bool/not.dhall sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4
+        ../Bool/not.dhall
+          sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4
       ? ../Bool/not.dhall
 
 let lessThanEqual =
-        ./lessThanEqual.dhall sha256:e3cca9f3942f81fa78a2bea23c0c24519c67cfe438116c38e797e12dcd26f6bc
+        ./lessThanEqual.dhall
+          sha256:e3cca9f3942f81fa78a2bea23c0c24519c67cfe438116c38e797e12dcd26f6bc
       ? ./lessThanEqual.dhall
 
 let greaterThan
diff --git a/dhall-lang/Prelude/Integer/greaterThanEqual b/dhall-lang/Prelude/Integer/greaterThanEqual
--- a/dhall-lang/Prelude/Integer/greaterThanEqual
+++ b/dhall-lang/Prelude/Integer/greaterThanEqual
@@ -1,2 +1,3 @@
-  ./greaterThanEqual.dhall sha256:a9fa2dc5cd6067a23b39d7fe8d14a63109583b320429fb0e446658a5aae0a958
+  ./greaterThanEqual.dhall
+    sha256:a9fa2dc5cd6067a23b39d7fe8d14a63109583b320429fb0e446658a5aae0a958
 ? ./greaterThanEqual.dhall
diff --git a/dhall-lang/Prelude/Integer/greaterThanEqual.dhall b/dhall-lang/Prelude/Integer/greaterThanEqual.dhall
--- a/dhall-lang/Prelude/Integer/greaterThanEqual.dhall
+++ b/dhall-lang/Prelude/Integer/greaterThanEqual.dhall
@@ -2,7 +2,8 @@
 `greaterThanEqual` checks if one Integer is greater than or equal to another.
 -}
 let lessThanEqual =
-        ./lessThanEqual.dhall sha256:e3cca9f3942f81fa78a2bea23c0c24519c67cfe438116c38e797e12dcd26f6bc
+        ./lessThanEqual.dhall
+          sha256:e3cca9f3942f81fa78a2bea23c0c24519c67cfe438116c38e797e12dcd26f6bc
       ? ./lessThanEqual.dhall
 
 let greaterThanEqual
diff --git a/dhall-lang/Prelude/Integer/lessThan b/dhall-lang/Prelude/Integer/lessThan
--- a/dhall-lang/Prelude/Integer/lessThan
+++ b/dhall-lang/Prelude/Integer/lessThan
@@ -1,2 +1,3 @@
-  ./lessThan.dhall sha256:eeaa0081d10c6c97464ef193c40f1aa5cbb12f0202972ab42f3d310c2fd6a3f0
+  ./lessThan.dhall
+    sha256:eeaa0081d10c6c97464ef193c40f1aa5cbb12f0202972ab42f3d310c2fd6a3f0
 ? ./lessThan.dhall
diff --git a/dhall-lang/Prelude/Integer/lessThan.dhall b/dhall-lang/Prelude/Integer/lessThan.dhall
--- a/dhall-lang/Prelude/Integer/lessThan.dhall
+++ b/dhall-lang/Prelude/Integer/lessThan.dhall
@@ -1,6 +1,7 @@
 --| `lessThan` checks if one Integer is less than another.
 let greaterThan =
-        ./greaterThan.dhall sha256:d23affd73029fc9aaf867c2c7b86510ca2802d3f0d1f3e1d1a93ffd87b7cb64b
+        ./greaterThan.dhall
+          sha256:d23affd73029fc9aaf867c2c7b86510ca2802d3f0d1f3e1d1a93ffd87b7cb64b
       ? ./greaterThan.dhall
 
 let lessThan
diff --git a/dhall-lang/Prelude/Integer/lessThanEqual b/dhall-lang/Prelude/Integer/lessThanEqual
--- a/dhall-lang/Prelude/Integer/lessThanEqual
+++ b/dhall-lang/Prelude/Integer/lessThanEqual
@@ -1,2 +1,3 @@
-  ./lessThanEqual.dhall sha256:e3cca9f3942f81fa78a2bea23c0c24519c67cfe438116c38e797e12dcd26f6bc
+  ./lessThanEqual.dhall
+    sha256:e3cca9f3942f81fa78a2bea23c0c24519c67cfe438116c38e797e12dcd26f6bc
 ? ./lessThanEqual.dhall
diff --git a/dhall-lang/Prelude/Integer/lessThanEqual.dhall b/dhall-lang/Prelude/Integer/lessThanEqual.dhall
--- a/dhall-lang/Prelude/Integer/lessThanEqual.dhall
+++ b/dhall-lang/Prelude/Integer/lessThanEqual.dhall
@@ -1,18 +1,22 @@
 --| `lessThanEqual` checks if one Integer is less than or equal to another.
 let Natural/greaterThanEqual =
-        ../Natural/greaterThanEqual.dhall sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4
+        ../Natural/greaterThanEqual.dhall
+          sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4
       ? ../Natural/greaterThanEqual.dhall
 
 let Natural/lessThanEqual =
-        ../Natural/lessThanEqual.dhall sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99
+        ../Natural/lessThanEqual.dhall
+          sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99
       ? ../Natural/lessThanEqual.dhall
 
 let nonPositive =
-        ./nonPositive.dhall sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b
+        ./nonPositive.dhall
+          sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b
       ? ./nonPositive.dhall
 
 let nonNegative =
-        ./nonNegative.dhall sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663
+        ./nonNegative.dhall
+          sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663
       ? ./nonNegative.dhall
 
 let lessThanEqual
diff --git a/dhall-lang/Prelude/Integer/multiply b/dhall-lang/Prelude/Integer/multiply
--- a/dhall-lang/Prelude/Integer/multiply
+++ b/dhall-lang/Prelude/Integer/multiply
@@ -1,2 +1,3 @@
-  ./multiply.dhall sha256:dcb1ed7c8475ece8d67db92cd249fc728541778ff82509e28c3760e341880e4d
+  ./multiply.dhall
+    sha256:dcb1ed7c8475ece8d67db92cd249fc728541778ff82509e28c3760e341880e4d
 ? ./multiply.dhall
diff --git a/dhall-lang/Prelude/Integer/multiply.dhall b/dhall-lang/Prelude/Integer/multiply.dhall
--- a/dhall-lang/Prelude/Integer/multiply.dhall
+++ b/dhall-lang/Prelude/Integer/multiply.dhall
@@ -1,6 +1,7 @@
 --| `multiply m n` computes `m * n`.
 let nonPositive =
-        ./nonPositive.dhall sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b
+        ./nonPositive.dhall
+          sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b
       ? ./nonPositive.dhall
 
 let multiplyNonNegative =
diff --git a/dhall-lang/Prelude/Integer/negate b/dhall-lang/Prelude/Integer/negate
--- a/dhall-lang/Prelude/Integer/negate
+++ b/dhall-lang/Prelude/Integer/negate
@@ -1,2 +1,3 @@
-  ./negate.dhall sha256:2373c992e1de93634bc6a8781eb073b2a92a70170133e49762a785f3a136df5d
+  ./negate.dhall
+    sha256:2373c992e1de93634bc6a8781eb073b2a92a70170133e49762a785f3a136df5d
 ? ./negate.dhall
diff --git a/dhall-lang/Prelude/Integer/negative b/dhall-lang/Prelude/Integer/negative
--- a/dhall-lang/Prelude/Integer/negative
+++ b/dhall-lang/Prelude/Integer/negative
@@ -1,2 +1,3 @@
-  ./negative.dhall sha256:23e4b3c61eea9e878a7f83bf25fd0ea2c6a6d60174890d65be885828b690a570
+  ./negative.dhall
+    sha256:23e4b3c61eea9e878a7f83bf25fd0ea2c6a6d60174890d65be885828b690a570
 ? ./negative.dhall
diff --git a/dhall-lang/Prelude/Integer/negative.dhall b/dhall-lang/Prelude/Integer/negative.dhall
--- a/dhall-lang/Prelude/Integer/negative.dhall
+++ b/dhall-lang/Prelude/Integer/negative.dhall
@@ -4,7 +4,8 @@
 `negative` is more efficient than `./lessThan +0` or `./lessThanEqual -1`.
 -}
 let positive =
-        ./positive.dhall sha256:7bdbf50fcdb83d01f74c7e2a92bf5c9104eff5d8c5b4587e9337f0caefcfdbe3
+        ./positive.dhall
+          sha256:7bdbf50fcdb83d01f74c7e2a92bf5c9104eff5d8c5b4587e9337f0caefcfdbe3
       ? ./positive.dhall
 
 let negative
diff --git a/dhall-lang/Prelude/Integer/nonNegative b/dhall-lang/Prelude/Integer/nonNegative
--- a/dhall-lang/Prelude/Integer/nonNegative
+++ b/dhall-lang/Prelude/Integer/nonNegative
@@ -1,2 +1,3 @@
-  ./nonNegative.dhall sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663
+  ./nonNegative.dhall
+    sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663
 ? ./nonNegative.dhall
diff --git a/dhall-lang/Prelude/Integer/nonNegative.dhall b/dhall-lang/Prelude/Integer/nonNegative.dhall
--- a/dhall-lang/Prelude/Integer/nonNegative.dhall
+++ b/dhall-lang/Prelude/Integer/nonNegative.dhall
@@ -4,7 +4,8 @@
 `nonNegative` is more efficient than `./greaterThanEqual +0` or `./greaterThan -1`.
 -}
 let nonPositive =
-        ./nonPositive.dhall sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b
+        ./nonPositive.dhall
+          sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b
       ? ./nonPositive.dhall
 
 let nonNegative
diff --git a/dhall-lang/Prelude/Integer/nonPositive b/dhall-lang/Prelude/Integer/nonPositive
--- a/dhall-lang/Prelude/Integer/nonPositive
+++ b/dhall-lang/Prelude/Integer/nonPositive
@@ -1,2 +1,3 @@
-  ./nonPositive.dhall sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b
+  ./nonPositive.dhall
+    sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b
 ? ./nonPositive.dhall
diff --git a/dhall-lang/Prelude/Integer/package.dhall b/dhall-lang/Prelude/Integer/package.dhall
--- a/dhall-lang/Prelude/Integer/package.dhall
+++ b/dhall-lang/Prelude/Integer/package.dhall
@@ -1,55 +1,73 @@
 { abs =
-      ./abs.dhall sha256:35212fcbe1e60cb95b033a4a9c6e45befca4a298aa9919915999d09e69ddced1
+      ./abs.dhall
+        sha256:35212fcbe1e60cb95b033a4a9c6e45befca4a298aa9919915999d09e69ddced1
     ? ./abs.dhall
 , add =
-      ./add.dhall sha256:7da1306a0bf87c5668beead2a1db1b18861e53d7ce1f38057b2964b649f59c3b
+      ./add.dhall
+        sha256:7da1306a0bf87c5668beead2a1db1b18861e53d7ce1f38057b2964b649f59c3b
     ? ./add.dhall
 , clamp =
-      ./clamp.dhall sha256:ea42096cf3e024fadfaf910e0b839005b0ea7514fff11e5a3950a77694d9c5d2
+      ./clamp.dhall
+        sha256:ea42096cf3e024fadfaf910e0b839005b0ea7514fff11e5a3950a77694d9c5d2
     ? ./clamp.dhall
 , equal =
-      ./equal.dhall sha256:2d99a205086aa77eea17ae1dab22c275f3eb007bccdc8d9895b93497ebfc39f8
+      ./equal.dhall
+        sha256:2d99a205086aa77eea17ae1dab22c275f3eb007bccdc8d9895b93497ebfc39f8
     ? ./equal.dhall
 , greaterThan =
-      ./greaterThan.dhall sha256:d23affd73029fc9aaf867c2c7b86510ca2802d3f0d1f3e1d1a93ffd87b7cb64b
+      ./greaterThan.dhall
+        sha256:d23affd73029fc9aaf867c2c7b86510ca2802d3f0d1f3e1d1a93ffd87b7cb64b
     ? ./greaterThan.dhall
 , greaterThanEqual =
-      ./greaterThanEqual.dhall sha256:a9fa2dc5cd6067a23b39d7fe8d14a63109583b320429fb0e446658a5aae0a958
+      ./greaterThanEqual.dhall
+        sha256:a9fa2dc5cd6067a23b39d7fe8d14a63109583b320429fb0e446658a5aae0a958
     ? ./greaterThanEqual.dhall
 , lessThan =
-      ./lessThan.dhall sha256:eeaa0081d10c6c97464ef193c40f1aa5cbb12f0202972ab42f3d310c2fd6a3f0
+      ./lessThan.dhall
+        sha256:eeaa0081d10c6c97464ef193c40f1aa5cbb12f0202972ab42f3d310c2fd6a3f0
     ? ./lessThan.dhall
 , lessThanEqual =
-      ./lessThanEqual.dhall sha256:e3cca9f3942f81fa78a2bea23c0c24519c67cfe438116c38e797e12dcd26f6bc
+      ./lessThanEqual.dhall
+        sha256:e3cca9f3942f81fa78a2bea23c0c24519c67cfe438116c38e797e12dcd26f6bc
     ? ./lessThanEqual.dhall
 , multiply =
-      ./multiply.dhall sha256:dcb1ed7c8475ece8d67db92cd249fc728541778ff82509e28c3760e341880e4d
+      ./multiply.dhall
+        sha256:dcb1ed7c8475ece8d67db92cd249fc728541778ff82509e28c3760e341880e4d
     ? ./multiply.dhall
 , negate =
-      ./negate.dhall sha256:2373c992e1de93634bc6a8781eb073b2a92a70170133e49762a785f3a136df5d
+      ./negate.dhall
+        sha256:2373c992e1de93634bc6a8781eb073b2a92a70170133e49762a785f3a136df5d
     ? ./negate.dhall
 , negative =
-      ./negative.dhall sha256:23e4b3c61eea9e878a7f83bf25fd0ea2c6a6d60174890d65be885828b690a570
+      ./negative.dhall
+        sha256:23e4b3c61eea9e878a7f83bf25fd0ea2c6a6d60174890d65be885828b690a570
     ? ./negative.dhall
 , nonNegative =
-      ./nonNegative.dhall sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663
+      ./nonNegative.dhall
+        sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663
     ? ./nonNegative.dhall
 , nonPositive =
-      ./nonPositive.dhall sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b
+      ./nonPositive.dhall
+        sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b
     ? ./nonPositive.dhall
 , positive =
-      ./positive.dhall sha256:7bdbf50fcdb83d01f74c7e2a92bf5c9104eff5d8c5b4587e9337f0caefcfdbe3
+      ./positive.dhall
+        sha256:7bdbf50fcdb83d01f74c7e2a92bf5c9104eff5d8c5b4587e9337f0caefcfdbe3
     ? ./positive.dhall
 , show =
-      ./show.dhall sha256:ecf8b0594cd5181bc45d3b7ea0d44d3ba9ad5dac6ec17bb8968beb65f4b1baa9
+      ./show.dhall
+        sha256:ecf8b0594cd5181bc45d3b7ea0d44d3ba9ad5dac6ec17bb8968beb65f4b1baa9
     ? ./show.dhall
 , subtract =
-      ./subtract.dhall sha256:a34d36272fa8ae4f1ec8b56222fe8dc8a2ec55ec6538b840de0cbe207b006fda
+      ./subtract.dhall
+        sha256:a34d36272fa8ae4f1ec8b56222fe8dc8a2ec55ec6538b840de0cbe207b006fda
     ? ./subtract.dhall
 , toDouble =
-      ./toDouble.dhall sha256:77bc5d635dc4d952f37cc96f2a681d5ac503b4e8b21fc00055b1946adb5beda7
+      ./toDouble.dhall
+        sha256:77bc5d635dc4d952f37cc96f2a681d5ac503b4e8b21fc00055b1946adb5beda7
     ? ./toDouble.dhall
 , toNatural =
-      ./toNatural.dhall sha256:4d128730d74e7f832e53873cb5204aa91b79758be5ce4e1aa991fe1951304a0e
+      ./toNatural.dhall
+        sha256:4d128730d74e7f832e53873cb5204aa91b79758be5ce4e1aa991fe1951304a0e
     ? ./toNatural.dhall
 }
diff --git a/dhall-lang/Prelude/Integer/positive b/dhall-lang/Prelude/Integer/positive
--- a/dhall-lang/Prelude/Integer/positive
+++ b/dhall-lang/Prelude/Integer/positive
@@ -1,2 +1,3 @@
-  ./positive.dhall sha256:7bdbf50fcdb83d01f74c7e2a92bf5c9104eff5d8c5b4587e9337f0caefcfdbe3
+  ./positive.dhall
+    sha256:7bdbf50fcdb83d01f74c7e2a92bf5c9104eff5d8c5b4587e9337f0caefcfdbe3
 ? ./positive.dhall
diff --git a/dhall-lang/Prelude/Integer/positive.dhall b/dhall-lang/Prelude/Integer/positive.dhall
--- a/dhall-lang/Prelude/Integer/positive.dhall
+++ b/dhall-lang/Prelude/Integer/positive.dhall
@@ -4,11 +4,13 @@
 `positive` is more efficient than `./greaterThan +0` or `./greaterThanEqual +1`.
 -}
 let not =
-        ../Bool/not.dhall sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4
+        ../Bool/not.dhall
+          sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4
       ? ../Bool/not.dhall
 
 let nonPositive =
-        ./nonPositive.dhall sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b
+        ./nonPositive.dhall
+          sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b
       ? ./nonPositive.dhall
 
 let positive
diff --git a/dhall-lang/Prelude/Integer/show b/dhall-lang/Prelude/Integer/show
--- a/dhall-lang/Prelude/Integer/show
+++ b/dhall-lang/Prelude/Integer/show
@@ -1,2 +1,3 @@
-  ./show.dhall sha256:ecf8b0594cd5181bc45d3b7ea0d44d3ba9ad5dac6ec17bb8968beb65f4b1baa9
+  ./show.dhall
+    sha256:ecf8b0594cd5181bc45d3b7ea0d44d3ba9ad5dac6ec17bb8968beb65f4b1baa9
 ? ./show.dhall
diff --git a/dhall-lang/Prelude/Integer/subtract b/dhall-lang/Prelude/Integer/subtract
--- a/dhall-lang/Prelude/Integer/subtract
+++ b/dhall-lang/Prelude/Integer/subtract
@@ -1,2 +1,3 @@
-  ./subtract.dhall sha256:a34d36272fa8ae4f1ec8b56222fe8dc8a2ec55ec6538b840de0cbe207b006fda
+  ./subtract.dhall
+    sha256:a34d36272fa8ae4f1ec8b56222fe8dc8a2ec55ec6538b840de0cbe207b006fda
 ? ./subtract.dhall
diff --git a/dhall-lang/Prelude/Integer/subtract.dhall b/dhall-lang/Prelude/Integer/subtract.dhall
--- a/dhall-lang/Prelude/Integer/subtract.dhall
+++ b/dhall-lang/Prelude/Integer/subtract.dhall
@@ -1,6 +1,7 @@
 --| `subtract m n` computes `n - m`.
 let nonPositive =
-        ./nonPositive.dhall sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b
+        ./nonPositive.dhall
+          sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b
       ? ./nonPositive.dhall
 
 let subtractNonNegative =
diff --git a/dhall-lang/Prelude/Integer/toDouble b/dhall-lang/Prelude/Integer/toDouble
--- a/dhall-lang/Prelude/Integer/toDouble
+++ b/dhall-lang/Prelude/Integer/toDouble
@@ -1,2 +1,3 @@
-  ./toDouble.dhall sha256:77bc5d635dc4d952f37cc96f2a681d5ac503b4e8b21fc00055b1946adb5beda7
+  ./toDouble.dhall
+    sha256:77bc5d635dc4d952f37cc96f2a681d5ac503b4e8b21fc00055b1946adb5beda7
 ? ./toDouble.dhall
diff --git a/dhall-lang/Prelude/Integer/toNatural b/dhall-lang/Prelude/Integer/toNatural
--- a/dhall-lang/Prelude/Integer/toNatural
+++ b/dhall-lang/Prelude/Integer/toNatural
@@ -1,2 +1,3 @@
-  ./toNatural.dhall sha256:4d128730d74e7f832e53873cb5204aa91b79758be5ce4e1aa991fe1951304a0e
+  ./toNatural.dhall
+    sha256:4d128730d74e7f832e53873cb5204aa91b79758be5ce4e1aa991fe1951304a0e
 ? ./toNatural.dhall
diff --git a/dhall-lang/Prelude/Integer/toNatural.dhall b/dhall-lang/Prelude/Integer/toNatural.dhall
--- a/dhall-lang/Prelude/Integer/toNatural.dhall
+++ b/dhall-lang/Prelude/Integer/toNatural.dhall
@@ -2,7 +2,8 @@
 Convert an `Integer` to an `Optional Natural`, with negative numbers becoming `None Natural`.
 -}
 let nonNegative =
-        ./nonNegative.dhall sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663
+        ./nonNegative.dhall
+          sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663
       ? ./nonNegative.dhall
 
 let toNatural
diff --git a/dhall-lang/Prelude/JSON/Format b/dhall-lang/Prelude/JSON/Format
--- a/dhall-lang/Prelude/JSON/Format
+++ b/dhall-lang/Prelude/JSON/Format
@@ -1,2 +1,3 @@
-  ./Format.dhall sha256:d7936b510cfc091faa994652af0eb5feb889cd44bc989edbe4f1eb8c5623caac
+  ./Format.dhall
+    sha256:d7936b510cfc091faa994652af0eb5feb889cd44bc989edbe4f1eb8c5623caac
 ? ./Format.dhall
diff --git a/dhall-lang/Prelude/JSON/Nesting b/dhall-lang/Prelude/JSON/Nesting
--- a/dhall-lang/Prelude/JSON/Nesting
+++ b/dhall-lang/Prelude/JSON/Nesting
@@ -1,2 +1,3 @@
-  ./Nesting.dhall sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335
+  ./Nesting.dhall
+    sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335
 ? ./Nesting.dhall
diff --git a/dhall-lang/Prelude/JSON/Tagged b/dhall-lang/Prelude/JSON/Tagged
--- a/dhall-lang/Prelude/JSON/Tagged
+++ b/dhall-lang/Prelude/JSON/Tagged
@@ -1,2 +1,3 @@
-  ./Tagged.dhall sha256:21feca7d2b23f210d0696131d792e18a7d24fdcc85d41a49ba85b98670eba194
+  ./Tagged.dhall
+    sha256:21feca7d2b23f210d0696131d792e18a7d24fdcc85d41a49ba85b98670eba194
 ? ./Tagged.dhall
diff --git a/dhall-lang/Prelude/JSON/Tagged.dhall b/dhall-lang/Prelude/JSON/Tagged.dhall
--- a/dhall-lang/Prelude/JSON/Tagged.dhall
+++ b/dhall-lang/Prelude/JSON/Tagged.dhall
@@ -65,7 +65,8 @@
     = λ(a : Type) →
         { field : Text
         , nesting :
-              ./Nesting.dhall sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335
+              ./Nesting.dhall
+                sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335
             ? ./Nesting.dhall
         , contents : a
         }
diff --git a/dhall-lang/Prelude/JSON/Type b/dhall-lang/Prelude/JSON/Type
--- a/dhall-lang/Prelude/JSON/Type
+++ b/dhall-lang/Prelude/JSON/Type
@@ -1,2 +1,3 @@
-  ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
+  ./Type.dhall
+    sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
 ? ./Type.dhall
diff --git a/dhall-lang/Prelude/JSON/array b/dhall-lang/Prelude/JSON/array
--- a/dhall-lang/Prelude/JSON/array
+++ b/dhall-lang/Prelude/JSON/array
@@ -1,2 +1,3 @@
-  ./array.dhall sha256:fb6346a9c63638fe3c59f8108e19eebdbddc51389ec5570bab4c25f890ccccc8
+  ./array.dhall
+    sha256:fb6346a9c63638fe3c59f8108e19eebdbddc51389ec5570bab4c25f890ccccc8
 ? ./array.dhall
diff --git a/dhall-lang/Prelude/JSON/array.dhall b/dhall-lang/Prelude/JSON/array.dhall
--- a/dhall-lang/Prelude/JSON/array.dhall
+++ b/dhall-lang/Prelude/JSON/array.dhall
@@ -13,11 +13,13 @@
 ```
 -}
 let JSON =
-        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
+        ./Type.dhall
+          sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
       ? ./Type.dhall
 
 let List/map =
-        ../List/map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
+        ../List/map.dhall
+          sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
       ? ../List/map.dhall
 
 let array
diff --git a/dhall-lang/Prelude/JSON/bool b/dhall-lang/Prelude/JSON/bool
--- a/dhall-lang/Prelude/JSON/bool
+++ b/dhall-lang/Prelude/JSON/bool
@@ -1,2 +1,3 @@
-  ./bool.dhall sha256:e043d9ed01e5b45899059e128243f3dae7ce65f293f0015ce816fc36d30f7f39
+  ./bool.dhall
+    sha256:e043d9ed01e5b45899059e128243f3dae7ce65f293f0015ce816fc36d30f7f39
 ? ./bool.dhall
diff --git a/dhall-lang/Prelude/JSON/bool.dhall b/dhall-lang/Prelude/JSON/bool.dhall
--- a/dhall-lang/Prelude/JSON/bool.dhall
+++ b/dhall-lang/Prelude/JSON/bool.dhall
@@ -12,7 +12,8 @@
 ```
 -}
 let JSON =
-        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
+        ./Type.dhall
+          sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
       ? ./Type.dhall
 
 let bool
diff --git a/dhall-lang/Prelude/JSON/core.dhall b/dhall-lang/Prelude/JSON/core.dhall
--- a/dhall-lang/Prelude/JSON/core.dhall
+++ b/dhall-lang/Prelude/JSON/core.dhall
@@ -8,48 +8,63 @@
 `package.dhall` to avoid import cycles.
 -}
 { Type =
-      ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
+      ./Type.dhall
+        sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
     ? ./Type.dhall
 , Tagged =
-      ./Tagged.dhall sha256:21feca7d2b23f210d0696131d792e18a7d24fdcc85d41a49ba85b98670eba194
+      ./Tagged.dhall
+        sha256:21feca7d2b23f210d0696131d792e18a7d24fdcc85d41a49ba85b98670eba194
     ? ./Tagged.dhall
 , Nesting =
-      ./Nesting.dhall sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335
+      ./Nesting.dhall
+        sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335
     ? ./Nesting.dhall
 , keyText =
-      ./keyText.dhall sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc
+      ./keyText.dhall
+        sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc
     ? ./keyText.dhall
 , keyValue =
-      ./keyValue.dhall sha256:a0a97199d280c4cce72ffcbbf93b7ceda0a569cf4d173ac98e0aaaa78034b98c
+      ./keyValue.dhall
+        sha256:a0a97199d280c4cce72ffcbbf93b7ceda0a569cf4d173ac98e0aaaa78034b98c
     ? ./keyValue.dhall
 , string =
-      ./string.dhall sha256:7ddb3a3b9f3ed09ed011d621a10ad9825185cd03503be98a81d42f6afb77940e
+      ./string.dhall
+        sha256:7ddb3a3b9f3ed09ed011d621a10ad9825185cd03503be98a81d42f6afb77940e
     ? ./string.dhall
 , number =
-      ./number.dhall sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32
+      ./number.dhall
+        sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32
     ? ./number.dhall
 , double =
-      ./double.dhall sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32
+      ./double.dhall
+        sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32
     ? ./double.dhall
 , integer =
-      ./integer.dhall sha256:c81a417397fc6f62155ec71fdd8d2047f981f0881295b307de3dd88747bf7e40
+      ./integer.dhall
+        sha256:c81a417397fc6f62155ec71fdd8d2047f981f0881295b307de3dd88747bf7e40
     ? ./integer.dhall
 , natural =
-      ./natural.dhall sha256:a839dc6789f19f820e9cbf70c60f41f3b057c59ece1d226d04db5aca447eb0e5
+      ./natural.dhall
+        sha256:a839dc6789f19f820e9cbf70c60f41f3b057c59ece1d226d04db5aca447eb0e5
     ? ./natural.dhall
 , object =
-      ./object.dhall sha256:869aede785c34798be9f9fd457ece73e7f683f352ae4555f791516a365faf4ac
+      ./object.dhall
+        sha256:869aede785c34798be9f9fd457ece73e7f683f352ae4555f791516a365faf4ac
     ? ./object.dhall
 , array =
-      ./array.dhall sha256:fb6346a9c63638fe3c59f8108e19eebdbddc51389ec5570bab4c25f890ccccc8
+      ./array.dhall
+        sha256:fb6346a9c63638fe3c59f8108e19eebdbddc51389ec5570bab4c25f890ccccc8
     ? ./array.dhall
 , bool =
-      ./bool.dhall sha256:e043d9ed01e5b45899059e128243f3dae7ce65f293f0015ce816fc36d30f7f39
+      ./bool.dhall
+        sha256:e043d9ed01e5b45899059e128243f3dae7ce65f293f0015ce816fc36d30f7f39
     ? ./bool.dhall
 , null =
-      ./null.dhall sha256:1eeb9aee38eb8dde0e64efbaf60f24612c8194cc00b510bfb627c2ee2e1877b8
+      ./null.dhall
+        sha256:1eeb9aee38eb8dde0e64efbaf60f24612c8194cc00b510bfb627c2ee2e1877b8
     ? ./null.dhall
 , renderInteger =
-      ./renderInteger.dhall sha256:15b8d2ae46d5002832741927af787761df49798c911e2bf85db7a7b9cb5c078c
+      ./renderInteger.dhall
+        sha256:15b8d2ae46d5002832741927af787761df49798c911e2bf85db7a7b9cb5c078c
     ? ./renderInteger.dhall
 }
diff --git a/dhall-lang/Prelude/JSON/double b/dhall-lang/Prelude/JSON/double
--- a/dhall-lang/Prelude/JSON/double
+++ b/dhall-lang/Prelude/JSON/double
@@ -1,2 +1,3 @@
-  ./double.dhall sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32
+  ./double.dhall
+    sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32
 ? ./double.dhall
diff --git a/dhall-lang/Prelude/JSON/double.dhall b/dhall-lang/Prelude/JSON/double.dhall
--- a/dhall-lang/Prelude/JSON/double.dhall
+++ b/dhall-lang/Prelude/JSON/double.dhall
@@ -12,7 +12,8 @@
 ```
 -}
 let JSON =
-        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
+        ./Type.dhall
+          sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
       ? ./Type.dhall
 
 let double
diff --git a/dhall-lang/Prelude/JSON/integer b/dhall-lang/Prelude/JSON/integer
--- a/dhall-lang/Prelude/JSON/integer
+++ b/dhall-lang/Prelude/JSON/integer
@@ -1,2 +1,3 @@
-  ./integer.dhall sha256:c81a417397fc6f62155ec71fdd8d2047f981f0881295b307de3dd88747bf7e40
+  ./integer.dhall
+    sha256:c81a417397fc6f62155ec71fdd8d2047f981f0881295b307de3dd88747bf7e40
 ? ./integer.dhall
diff --git a/dhall-lang/Prelude/JSON/integer.dhall b/dhall-lang/Prelude/JSON/integer.dhall
--- a/dhall-lang/Prelude/JSON/integer.dhall
+++ b/dhall-lang/Prelude/JSON/integer.dhall
@@ -12,7 +12,8 @@
 ```
 -}
 let JSON =
-        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
+        ./Type.dhall
+          sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
       ? ./Type.dhall
 
 let integer
diff --git a/dhall-lang/Prelude/JSON/keyText b/dhall-lang/Prelude/JSON/keyText
--- a/dhall-lang/Prelude/JSON/keyText
+++ b/dhall-lang/Prelude/JSON/keyText
@@ -1,2 +1,3 @@
-  ./keyText.dhall sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc
+  ./keyText.dhall
+    sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc
 ? ./keyText.dhall
diff --git a/dhall-lang/Prelude/JSON/keyText.dhall b/dhall-lang/Prelude/JSON/keyText.dhall
--- a/dhall-lang/Prelude/JSON/keyText.dhall
+++ b/dhall-lang/Prelude/JSON/keyText.dhall
@@ -1,2 +1,3 @@
-  ../Map/keyText.dhall sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc
+  ../Map/keyText.dhall
+    sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc
 ? ../Map/keyText.dhall
diff --git a/dhall-lang/Prelude/JSON/keyValue b/dhall-lang/Prelude/JSON/keyValue
--- a/dhall-lang/Prelude/JSON/keyValue
+++ b/dhall-lang/Prelude/JSON/keyValue
@@ -1,2 +1,3 @@
-  ./keyValue.dhall sha256:a0a97199d280c4cce72ffcbbf93b7ceda0a569cf4d173ac98e0aaaa78034b98c
+  ./keyValue.dhall
+    sha256:a0a97199d280c4cce72ffcbbf93b7ceda0a569cf4d173ac98e0aaaa78034b98c
 ? ./keyValue.dhall
diff --git a/dhall-lang/Prelude/JSON/keyValue.dhall b/dhall-lang/Prelude/JSON/keyValue.dhall
--- a/dhall-lang/Prelude/JSON/keyValue.dhall
+++ b/dhall-lang/Prelude/JSON/keyValue.dhall
@@ -1,2 +1,3 @@
-  ../Map/keyValue.dhall sha256:a0a97199d280c4cce72ffcbbf93b7ceda0a569cf4d173ac98e0aaaa78034b98c
+  ../Map/keyValue.dhall
+    sha256:a0a97199d280c4cce72ffcbbf93b7ceda0a569cf4d173ac98e0aaaa78034b98c
 ? ../Map/keyValue.dhall
diff --git a/dhall-lang/Prelude/JSON/natural b/dhall-lang/Prelude/JSON/natural
--- a/dhall-lang/Prelude/JSON/natural
+++ b/dhall-lang/Prelude/JSON/natural
@@ -1,2 +1,3 @@
-  ./natural.dhall sha256:a839dc6789f19f820e9cbf70c60f41f3b057c59ece1d226d04db5aca447eb0e5
+  ./natural.dhall
+    sha256:a839dc6789f19f820e9cbf70c60f41f3b057c59ece1d226d04db5aca447eb0e5
 ? ./natural.dhall
diff --git a/dhall-lang/Prelude/JSON/natural.dhall b/dhall-lang/Prelude/JSON/natural.dhall
--- a/dhall-lang/Prelude/JSON/natural.dhall
+++ b/dhall-lang/Prelude/JSON/natural.dhall
@@ -8,7 +8,8 @@
 ```
 -}
 let JSON =
-        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
+        ./Type.dhall
+          sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
       ? ./Type.dhall
 
 let natural
diff --git a/dhall-lang/Prelude/JSON/null b/dhall-lang/Prelude/JSON/null
--- a/dhall-lang/Prelude/JSON/null
+++ b/dhall-lang/Prelude/JSON/null
@@ -1,2 +1,3 @@
-  ./null.dhall sha256:1eeb9aee38eb8dde0e64efbaf60f24612c8194cc00b510bfb627c2ee2e1877b8
+  ./null.dhall
+    sha256:1eeb9aee38eb8dde0e64efbaf60f24612c8194cc00b510bfb627c2ee2e1877b8
 ? ./null.dhall
diff --git a/dhall-lang/Prelude/JSON/null.dhall b/dhall-lang/Prelude/JSON/null.dhall
--- a/dhall-lang/Prelude/JSON/null.dhall
+++ b/dhall-lang/Prelude/JSON/null.dhall
@@ -8,7 +8,8 @@
 ```
 -}
 let JSON =
-        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
+        ./Type.dhall
+          sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
       ? ./Type.dhall
 
 let null
diff --git a/dhall-lang/Prelude/JSON/number b/dhall-lang/Prelude/JSON/number
--- a/dhall-lang/Prelude/JSON/number
+++ b/dhall-lang/Prelude/JSON/number
@@ -1,2 +1,3 @@
-  ./number.dhall sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32
+  ./number.dhall
+    sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32
 ? ./number.dhall
diff --git a/dhall-lang/Prelude/JSON/number.dhall b/dhall-lang/Prelude/JSON/number.dhall
--- a/dhall-lang/Prelude/JSON/number.dhall
+++ b/dhall-lang/Prelude/JSON/number.dhall
@@ -12,11 +12,13 @@
 ```
 -}
 let JSON =
-        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
+        ./Type.dhall
+          sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
       ? ./Type.dhall
 
 let double =
-        ./double.dhall sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32
+        ./double.dhall
+          sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32
       ? ./double.dhall
 
 let number
diff --git a/dhall-lang/Prelude/JSON/object b/dhall-lang/Prelude/JSON/object
--- a/dhall-lang/Prelude/JSON/object
+++ b/dhall-lang/Prelude/JSON/object
@@ -1,2 +1,3 @@
-  ./object.dhall sha256:869aede785c34798be9f9fd457ece73e7f683f352ae4555f791516a365faf4ac
+  ./object.dhall
+    sha256:869aede785c34798be9f9fd457ece73e7f683f352ae4555f791516a365faf4ac
 ? ./object.dhall
diff --git a/dhall-lang/Prelude/JSON/object.dhall b/dhall-lang/Prelude/JSON/object.dhall
--- a/dhall-lang/Prelude/JSON/object.dhall
+++ b/dhall-lang/Prelude/JSON/object.dhall
@@ -19,11 +19,13 @@
 ```
 -}
 let JSON =
-        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
+        ./Type.dhall
+          sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
       ? ./Type.dhall
 
 let List/map =
-        ../List/map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
+        ../List/map.dhall
+          sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
       ? ../List/map.dhall
 
 let object
diff --git a/dhall-lang/Prelude/JSON/omitNullFields b/dhall-lang/Prelude/JSON/omitNullFields
--- a/dhall-lang/Prelude/JSON/omitNullFields
+++ b/dhall-lang/Prelude/JSON/omitNullFields
@@ -1,2 +1,3 @@
-  ./omitNullFields.dhall sha256:e6850e70094540b75edeb46f4d6038324a62def8d63544a1e9541f79739db6f0
+  ./omitNullFields.dhall
+    sha256:e6850e70094540b75edeb46f4d6038324a62def8d63544a1e9541f79739db6f0
 ? ./omitNullFields.dhall
diff --git a/dhall-lang/Prelude/JSON/omitNullFields.dhall b/dhall-lang/Prelude/JSON/omitNullFields.dhall
--- a/dhall-lang/Prelude/JSON/omitNullFields.dhall
+++ b/dhall-lang/Prelude/JSON/omitNullFields.dhall
@@ -3,15 +3,18 @@
 for a configuration to encode absent fields
 -}
 let JSON =
-        ./core.dhall sha256:5dc1135d5481cfd6fde625aaed9fcbdb7aa7c14f2e76726aa5fdef028a5c10f5
+        ./core.dhall
+          sha256:5dc1135d5481cfd6fde625aaed9fcbdb7aa7c14f2e76726aa5fdef028a5c10f5
       ? ./core.dhall
 
 let List/concatMap =
-        ../List/concatMap.dhall sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64
+        ../List/concatMap.dhall
+          sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64
       ? ../List/concatMap.dhall
 
 let List/map =
-        ../List/map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
+        ../List/map.dhall
+          sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
       ? ../List/map.dhall
 
 let omitNullFields
diff --git a/dhall-lang/Prelude/JSON/package.dhall b/dhall-lang/Prelude/JSON/package.dhall
--- a/dhall-lang/Prelude/JSON/package.dhall
+++ b/dhall-lang/Prelude/JSON/package.dhall
@@ -1,22 +1,29 @@
   { render =
-        ./render.dhall sha256:36befdd8bb5a1c2b372709da245a8d074533b86429e137b894c08ad16fa34836
+        ./render.dhall
+          sha256:36befdd8bb5a1c2b372709da245a8d074533b86429e137b894c08ad16fa34836
       ? ./render.dhall
   , renderCompact =
-        ./renderCompact.dhall sha256:e6c8809fbe193fddd430f94350d69cefd45e7aaf8bd379e51b750fde75008562
+        ./renderCompact.dhall
+          sha256:e6c8809fbe193fddd430f94350d69cefd45e7aaf8bd379e51b750fde75008562
       ? ./renderCompact.dhall
   , renderYAML =
-        ./renderYAML.dhall sha256:bc71449397bbf48103c3ebbdd570cd27313115e94b2b1b96761d257d5c02d478
+        ./renderYAML.dhall
+          sha256:bc71449397bbf48103c3ebbdd570cd27313115e94b2b1b96761d257d5c02d478
       ? ./renderYAML.dhall
   , omitNullFields =
-        ./omitNullFields.dhall sha256:e6850e70094540b75edeb46f4d6038324a62def8d63544a1e9541f79739db6f0
+        ./omitNullFields.dhall
+          sha256:e6850e70094540b75edeb46f4d6038324a62def8d63544a1e9541f79739db6f0
       ? ./omitNullFields.dhall
   , tagInline =
-        ./tagInline.dhall sha256:49559ac11906ba6cc9eac25753e31e7addb13bc760df108024174c55523984c4
+        ./tagInline.dhall
+          sha256:49559ac11906ba6cc9eac25753e31e7addb13bc760df108024174c55523984c4
       ? ./tagInline.dhall
   , tagNested =
-        ./tagNested.dhall sha256:93a7415853b7677c832246efadc8e880c1b641a23589286a836a384ca311d26f
+        ./tagNested.dhall
+          sha256:93a7415853b7677c832246efadc8e880c1b641a23589286a836a384ca311d26f
       ? ./tagNested.dhall
   }
-∧ (   ./core.dhall sha256:5dc1135d5481cfd6fde625aaed9fcbdb7aa7c14f2e76726aa5fdef028a5c10f5
+∧ (   ./core.dhall
+        sha256:5dc1135d5481cfd6fde625aaed9fcbdb7aa7c14f2e76726aa5fdef028a5c10f5
     ? ./core.dhall
   )
diff --git a/dhall-lang/Prelude/JSON/render b/dhall-lang/Prelude/JSON/render
--- a/dhall-lang/Prelude/JSON/render
+++ b/dhall-lang/Prelude/JSON/render
@@ -1,2 +1,3 @@
-  ./render.dhall sha256:36befdd8bb5a1c2b372709da245a8d074533b86429e137b894c08ad16fa34836
+  ./render.dhall
+    sha256:36befdd8bb5a1c2b372709da245a8d074533b86429e137b894c08ad16fa34836
 ? ./render.dhall
diff --git a/dhall-lang/Prelude/JSON/render.dhall b/dhall-lang/Prelude/JSON/render.dhall
--- a/dhall-lang/Prelude/JSON/render.dhall
+++ b/dhall-lang/Prelude/JSON/render.dhall
@@ -5,15 +5,18 @@
 more sophisticated you should use `dhall-to-json` or `dhall-to-yaml`
 -}
 let JSON =
-        ./core.dhall sha256:5dc1135d5481cfd6fde625aaed9fcbdb7aa7c14f2e76726aa5fdef028a5c10f5
+        ./core.dhall
+          sha256:5dc1135d5481cfd6fde625aaed9fcbdb7aa7c14f2e76726aa5fdef028a5c10f5
       ? ./core.dhall
 
 let renderAs =
-        ./renderAs.dhall sha256:c23be039c9601a33d6546fd99a8d72bee8dde5f46176d57cc96613b31a3bb471
+        ./renderAs.dhall
+          sha256:c23be039c9601a33d6546fd99a8d72bee8dde5f46176d57cc96613b31a3bb471
       ? ./renderAs.dhall
 
 let Format =
-        ./Format.dhall sha256:d7936b510cfc091faa994652af0eb5feb889cd44bc989edbe4f1eb8c5623caac
+        ./Format.dhall
+          sha256:d7936b510cfc091faa994652af0eb5feb889cd44bc989edbe4f1eb8c5623caac
       ? ./Format.dhall
 
 let render
diff --git a/dhall-lang/Prelude/JSON/renderAs b/dhall-lang/Prelude/JSON/renderAs
--- a/dhall-lang/Prelude/JSON/renderAs
+++ b/dhall-lang/Prelude/JSON/renderAs
@@ -1,2 +1,3 @@
-  ./renderAs.dhall sha256:c23be039c9601a33d6546fd99a8d72bee8dde5f46176d57cc96613b31a3bb471
+  ./renderAs.dhall
+    sha256:c23be039c9601a33d6546fd99a8d72bee8dde5f46176d57cc96613b31a3bb471
 ? ./renderAs.dhall
diff --git a/dhall-lang/Prelude/JSON/renderAs.dhall b/dhall-lang/Prelude/JSON/renderAs.dhall
--- a/dhall-lang/Prelude/JSON/renderAs.dhall
+++ b/dhall-lang/Prelude/JSON/renderAs.dhall
@@ -1,32 +1,49 @@
 --| Render a `JSON` value as `Text` in either JSON or YAML format.
 let JSON =
-        ./core.dhall sha256:5dc1135d5481cfd6fde625aaed9fcbdb7aa7c14f2e76726aa5fdef028a5c10f5
+        ./core.dhall
+          sha256:5dc1135d5481cfd6fde625aaed9fcbdb7aa7c14f2e76726aa5fdef028a5c10f5
       ? ./core.dhall
 
 let Function/identity =
-        ../Function/identity.dhall sha256:f78b96792b459cb664f41c6119bd8897dd04353a3343521d436cd82ad71cb4d4
+        ../Function/identity.dhall
+          sha256:f78b96792b459cb664f41c6119bd8897dd04353a3343521d436cd82ad71cb4d4
       ? ../Function/identity.dhall
 
 let Text/concatMap =
-        ../Text/concatMap.dhall sha256:7a0b0b99643de69d6f94ba49441cd0fa0507cbdfa8ace0295f16097af37e226f
+        ../Text/concatMap.dhall
+          sha256:7a0b0b99643de69d6f94ba49441cd0fa0507cbdfa8ace0295f16097af37e226f
       ? ../Text/concatMap.dhall
 
 let List/map =
-        ../List/map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
+        ../List/map.dhall
+          sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
       ? ../List/map.dhall
 
-let List/concatMap =
-        ../List/concatMap.dhall sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64
-      ? ../List/concatMap.dhall
+let NonEmpty =
+        ../NonEmpty/Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ../NonEmpty/Type.dhall
 
-let NonEmpty
-    : Type → Type
-    = λ(a : Type) → { head : a, tail : List a }
+let NonEmpty/toList =
+        ../NonEmpty/toList.dhall
+          sha256:0977fe14b77232a4451dcf409c43df4589c4b3cdde7b613aab8df183be1b53f5
+      ? ../NonEmpty/toList.dhall
 
-let NonEmpty/singleton
-    : ∀(a : Type) → a → NonEmpty a
-    = λ(a : Type) → λ(x : a) → { head = x, tail = [] : List a }
+let NonEmpty/concat =
+        ../NonEmpty/concat.dhall
+          sha256:6d55181938c06c6b806877028f6a241912e9c0935d9a10dd958775bf21e0f64d
+      ? ../NonEmpty/concat.dhall
 
+let NonEmpty/map =
+        ../NonEmpty/map.dhall
+          sha256:93d53afe874bb2eed946c21ca5ada3c9716b7d00e6d8edfaba6484cd9c5a00bd
+      ? ../NonEmpty/map.dhall
+
+let NonEmpty/singleton =
+        ../NonEmpty/singleton.dhall
+          sha256:c9197aabe97695f7ca66f7419bf172d806b2c915594a8fc0d2ff6495db496ff2
+      ? ../NonEmpty/singleton.dhall
+
 let List/uncons
     : ∀(a : Type) → List a → Optional (NonEmpty a)
     = {- This version uses the `ls` argument only once to prevent cache blowups at the price
@@ -53,28 +70,6 @@
           )
           (None (NonEmpty a))
 
-let NonEmpty/toList
-    : ∀(a : Type) → NonEmpty a → List a
-    = λ(a : Type) → λ(nonEmpty : NonEmpty a) → [ nonEmpty.head ] # nonEmpty.tail
-
-let NonEmpty/concat
-    : ∀(a : Type) → NonEmpty (NonEmpty a) → NonEmpty a
-    = λ(a : Type) →
-      λ(lss : NonEmpty (NonEmpty a)) →
-        { head = lss.head.head
-        , tail =
-              lss.head.tail
-            # List/concatMap (NonEmpty a) a (NonEmpty/toList a) lss.tail
-        }
-
-let NonEmpty/map
-    : ∀(a : Type) → ∀(b : Type) → (a → b) → NonEmpty a → NonEmpty b
-    = λ(a : Type) →
-      λ(b : Type) →
-      λ(fn : a → b) →
-      λ(ls : NonEmpty a) →
-        { head = fn ls.head, tail = List/map a b fn ls.tail }
-
 let NonEmpty/mapHead
     : ∀(a : Type) → (a → a) → NonEmpty a → NonEmpty a
     = λ(a : Type) →
@@ -189,7 +184,8 @@
 let indentTail = NonEmpty/mapTail Text addIndent
 
 let Format =
-        ./Format.dhall sha256:d7936b510cfc091faa994652af0eb5feb889cd44bc989edbe4f1eb8c5623caac
+        ./Format.dhall
+          sha256:d7936b510cfc091faa994652af0eb5feb889cd44bc989edbe4f1eb8c5623caac
       ? ./Format.dhall
 
 let ObjectField = { mapKey : Text, mapValue : Block }
diff --git a/dhall-lang/Prelude/JSON/renderCompact.dhall b/dhall-lang/Prelude/JSON/renderCompact.dhall
--- a/dhall-lang/Prelude/JSON/renderCompact.dhall
+++ b/dhall-lang/Prelude/JSON/renderCompact.dhall
@@ -1,14 +1,17 @@
 --| This renders JSON on a single line
 let JSON =
-        ./core.dhall sha256:5dc1135d5481cfd6fde625aaed9fcbdb7aa7c14f2e76726aa5fdef028a5c10f5
+        ./core.dhall
+          sha256:5dc1135d5481cfd6fde625aaed9fcbdb7aa7c14f2e76726aa5fdef028a5c10f5
       ? ./core.dhall
 
 let Text/concatMapSep =
-        ../Text/concatMapSep sha256:c272aca80a607bc5963d1fcb38819e7e0d3e72ac4d02b1183b1afb6a91340840
+        ../Text/concatMapSep
+          sha256:c272aca80a607bc5963d1fcb38819e7e0d3e72ac4d02b1183b1afb6a91340840
       ? ../Text/concatMapSep
 
 let renderInteger =
-        ./renderInteger.dhall sha256:15b8d2ae46d5002832741927af787761df49798c911e2bf85db7a7b9cb5c078c
+        ./renderInteger.dhall
+          sha256:15b8d2ae46d5002832741927af787761df49798c911e2bf85db7a7b9cb5c078c
       ? ./renderInteger.dhall
 
 let renderCompact
diff --git a/dhall-lang/Prelude/JSON/renderInteger.dhall b/dhall-lang/Prelude/JSON/renderInteger.dhall
--- a/dhall-lang/Prelude/JSON/renderInteger.dhall
+++ b/dhall-lang/Prelude/JSON/renderInteger.dhall
@@ -3,7 +3,8 @@
 which a number may not start with a plus sign (`+`).
 -}
 let Integer/nonNegative =
-        ../Integer/nonNegative.dhall sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663
+        ../Integer/nonNegative.dhall
+          sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663
       ? ../Integer/nonNegative.dhall
 
 let renderInteger
diff --git a/dhall-lang/Prelude/JSON/renderYAML b/dhall-lang/Prelude/JSON/renderYAML
--- a/dhall-lang/Prelude/JSON/renderYAML
+++ b/dhall-lang/Prelude/JSON/renderYAML
@@ -1,2 +1,3 @@
-  ./renderYAML.dhall sha256:bc71449397bbf48103c3ebbdd570cd27313115e94b2b1b96761d257d5c02d478
+  ./renderYAML.dhall
+    sha256:bc71449397bbf48103c3ebbdd570cd27313115e94b2b1b96761d257d5c02d478
 ? ./renderYAML.dhall
diff --git a/dhall-lang/Prelude/JSON/renderYAML.dhall b/dhall-lang/Prelude/JSON/renderYAML.dhall
--- a/dhall-lang/Prelude/JSON/renderYAML.dhall
+++ b/dhall-lang/Prelude/JSON/renderYAML.dhall
@@ -9,15 +9,18 @@
 `dhall-to-yaml`.
 -}
 let JSON =
-        ./core.dhall sha256:5dc1135d5481cfd6fde625aaed9fcbdb7aa7c14f2e76726aa5fdef028a5c10f5
+        ./core.dhall
+          sha256:5dc1135d5481cfd6fde625aaed9fcbdb7aa7c14f2e76726aa5fdef028a5c10f5
       ? ./core.dhall
 
 let renderAs =
-        ./renderAs.dhall sha256:c23be039c9601a33d6546fd99a8d72bee8dde5f46176d57cc96613b31a3bb471
+        ./renderAs.dhall
+          sha256:c23be039c9601a33d6546fd99a8d72bee8dde5f46176d57cc96613b31a3bb471
       ? ./renderAs.dhall
 
 let Format =
-        ./Format.dhall sha256:d7936b510cfc091faa994652af0eb5feb889cd44bc989edbe4f1eb8c5623caac
+        ./Format.dhall
+          sha256:d7936b510cfc091faa994652af0eb5feb889cd44bc989edbe4f1eb8c5623caac
       ? ./Format.dhall
 
 let renderYAML
diff --git a/dhall-lang/Prelude/JSON/string b/dhall-lang/Prelude/JSON/string
--- a/dhall-lang/Prelude/JSON/string
+++ b/dhall-lang/Prelude/JSON/string
@@ -1,2 +1,3 @@
-  ./string.dhall sha256:7ddb3a3b9f3ed09ed011d621a10ad9825185cd03503be98a81d42f6afb77940e
+  ./string.dhall
+    sha256:7ddb3a3b9f3ed09ed011d621a10ad9825185cd03503be98a81d42f6afb77940e
 ? ./string.dhall
diff --git a/dhall-lang/Prelude/JSON/string.dhall b/dhall-lang/Prelude/JSON/string.dhall
--- a/dhall-lang/Prelude/JSON/string.dhall
+++ b/dhall-lang/Prelude/JSON/string.dhall
@@ -12,7 +12,8 @@
 ```
 -}
 let JSON =
-        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
+        ./Type.dhall
+          sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759
       ? ./Type.dhall
 
 let string
diff --git a/dhall-lang/Prelude/JSON/tagInline b/dhall-lang/Prelude/JSON/tagInline
--- a/dhall-lang/Prelude/JSON/tagInline
+++ b/dhall-lang/Prelude/JSON/tagInline
@@ -1,2 +1,3 @@
-  ./tagInline.dhall sha256:49559ac11906ba6cc9eac25753e31e7addb13bc760df108024174c55523984c4
+  ./tagInline.dhall
+    sha256:49559ac11906ba6cc9eac25753e31e7addb13bc760df108024174c55523984c4
 ? ./tagInline.dhall
diff --git a/dhall-lang/Prelude/JSON/tagInline.dhall b/dhall-lang/Prelude/JSON/tagInline.dhall
--- a/dhall-lang/Prelude/JSON/tagInline.dhall
+++ b/dhall-lang/Prelude/JSON/tagInline.dhall
@@ -1,10 +1,12 @@
 --| Prepare a union value for JSON- or YAML-encoding with the inline layout
 let Nesting =
-        ./Nesting.dhall sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335
+        ./Nesting.dhall
+          sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335
       ? ./Nesting.dhall
 
 let Tagged =
-        ./Tagged.dhall sha256:21feca7d2b23f210d0696131d792e18a7d24fdcc85d41a49ba85b98670eba194
+        ./Tagged.dhall
+          sha256:21feca7d2b23f210d0696131d792e18a7d24fdcc85d41a49ba85b98670eba194
       ? ./Tagged.dhall
 
 let tagInline
diff --git a/dhall-lang/Prelude/JSON/tagNested b/dhall-lang/Prelude/JSON/tagNested
--- a/dhall-lang/Prelude/JSON/tagNested
+++ b/dhall-lang/Prelude/JSON/tagNested
@@ -1,2 +1,3 @@
-  ./tagNested.dhall sha256:93a7415853b7677c832246efadc8e880c1b641a23589286a836a384ca311d26f
+  ./tagNested.dhall
+    sha256:93a7415853b7677c832246efadc8e880c1b641a23589286a836a384ca311d26f
 ? ./tagNested.dhall
diff --git a/dhall-lang/Prelude/JSON/tagNested.dhall b/dhall-lang/Prelude/JSON/tagNested.dhall
--- a/dhall-lang/Prelude/JSON/tagNested.dhall
+++ b/dhall-lang/Prelude/JSON/tagNested.dhall
@@ -1,10 +1,12 @@
 --| Prepare a union value for JSON- or YAML-encoding with the nested layout
 let Nesting =
-        ./Nesting.dhall sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335
+        ./Nesting.dhall
+          sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335
       ? ./Nesting.dhall
 
 let Tagged =
-        ./Tagged.dhall sha256:21feca7d2b23f210d0696131d792e18a7d24fdcc85d41a49ba85b98670eba194
+        ./Tagged.dhall
+          sha256:21feca7d2b23f210d0696131d792e18a7d24fdcc85d41a49ba85b98670eba194
       ? ./Tagged.dhall
 
 let tagNested
diff --git a/dhall-lang/Prelude/List/all b/dhall-lang/Prelude/List/all
--- a/dhall-lang/Prelude/List/all
+++ b/dhall-lang/Prelude/List/all
@@ -1,2 +1,3 @@
-  ./all.dhall sha256:7ac5bb6f77e9ffe9e2356d90968d39764a9a32f75980206e6b12f815bb83dd15
+  ./all.dhall
+    sha256:7ac5bb6f77e9ffe9e2356d90968d39764a9a32f75980206e6b12f815bb83dd15
 ? ./all.dhall
diff --git a/dhall-lang/Prelude/List/any b/dhall-lang/Prelude/List/any
--- a/dhall-lang/Prelude/List/any
+++ b/dhall-lang/Prelude/List/any
@@ -1,2 +1,3 @@
-  ./any.dhall sha256:b8e9e13b25e799f342a81f6eda4075906eb1a19dfdcb10a0ca25925eba4033b8
+  ./any.dhall
+    sha256:b8e9e13b25e799f342a81f6eda4075906eb1a19dfdcb10a0ca25925eba4033b8
 ? ./any.dhall
diff --git a/dhall-lang/Prelude/List/build b/dhall-lang/Prelude/List/build
--- a/dhall-lang/Prelude/List/build
+++ b/dhall-lang/Prelude/List/build
@@ -1,2 +1,3 @@
-  ./build.dhall sha256:8cf73fc1e115cfcb79bb9cd490bfcbd45c824e93c57a0e64c86c0c72e9ebbe42
+  ./build.dhall
+    sha256:8cf73fc1e115cfcb79bb9cd490bfcbd45c824e93c57a0e64c86c0c72e9ebbe42
 ? ./build.dhall
diff --git a/dhall-lang/Prelude/List/concat b/dhall-lang/Prelude/List/concat
--- a/dhall-lang/Prelude/List/concat
+++ b/dhall-lang/Prelude/List/concat
@@ -1,2 +1,3 @@
-  ./concat.dhall sha256:54e43278be13276e03bd1afa89e562e94a0a006377ebea7db14c7562b0de292b
+  ./concat.dhall
+    sha256:54e43278be13276e03bd1afa89e562e94a0a006377ebea7db14c7562b0de292b
 ? ./concat.dhall
diff --git a/dhall-lang/Prelude/List/concatMap b/dhall-lang/Prelude/List/concatMap
--- a/dhall-lang/Prelude/List/concatMap
+++ b/dhall-lang/Prelude/List/concatMap
@@ -1,2 +1,3 @@
-  ./concatMap.dhall sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64
+  ./concatMap.dhall
+    sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64
 ? ./concatMap.dhall
diff --git a/dhall-lang/Prelude/List/default b/dhall-lang/Prelude/List/default
--- a/dhall-lang/Prelude/List/default
+++ b/dhall-lang/Prelude/List/default
@@ -1,2 +1,3 @@
-  ./default.dhall sha256:fd77809e497227403f42848ffcda05a3efab442d961027c34f3e31d5d24e6379
+  ./default.dhall
+    sha256:fd77809e497227403f42848ffcda05a3efab442d961027c34f3e31d5d24e6379
 ? ./default.dhall
diff --git a/dhall-lang/Prelude/List/drop b/dhall-lang/Prelude/List/drop
--- a/dhall-lang/Prelude/List/drop
+++ b/dhall-lang/Prelude/List/drop
@@ -1,2 +1,3 @@
-  ./drop.dhall sha256:af983ba3ead494dd72beed05c0f3a17c36a4244adedf7ced502c6512196ed0cf
+  ./drop.dhall
+    sha256:af983ba3ead494dd72beed05c0f3a17c36a4244adedf7ced502c6512196ed0cf
 ? ./drop.dhall
diff --git a/dhall-lang/Prelude/List/drop.dhall b/dhall-lang/Prelude/List/drop.dhall
--- a/dhall-lang/Prelude/List/drop.dhall
+++ b/dhall-lang/Prelude/List/drop.dhall
@@ -1,6 +1,7 @@
 --| Remove first `n` elements of a list
 let Natural/greaterThanEqual =
-        ../Natural/greaterThanEqual.dhall sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4
+        ../Natural/greaterThanEqual.dhall
+          sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4
       ? ../Natural/greaterThanEqual.dhall
 
 let drop
diff --git a/dhall-lang/Prelude/List/empty b/dhall-lang/Prelude/List/empty
--- a/dhall-lang/Prelude/List/empty
+++ b/dhall-lang/Prelude/List/empty
@@ -1,2 +1,3 @@
-  ./empty.dhall sha256:b2f561f35098c457353723c93a22bd5de28d26ecc5370814bef9dfda421e0147
+  ./empty.dhall
+    sha256:b2f561f35098c457353723c93a22bd5de28d26ecc5370814bef9dfda421e0147
 ? ./empty.dhall
diff --git a/dhall-lang/Prelude/List/filter b/dhall-lang/Prelude/List/filter
--- a/dhall-lang/Prelude/List/filter
+++ b/dhall-lang/Prelude/List/filter
@@ -1,2 +1,3 @@
-  ./filter.dhall sha256:8ebfede5bbfe09675f246c33eb83964880ac615c4b1be8d856076fdbc4b26ba6
+  ./filter.dhall
+    sha256:8ebfede5bbfe09675f246c33eb83964880ac615c4b1be8d856076fdbc4b26ba6
 ? ./filter.dhall
diff --git a/dhall-lang/Prelude/List/fold b/dhall-lang/Prelude/List/fold
--- a/dhall-lang/Prelude/List/fold
+++ b/dhall-lang/Prelude/List/fold
@@ -1,2 +1,3 @@
-  ./fold.dhall sha256:10bb945c25ab3943bd9df5a32e633cbfae112b7d3af38591784687e436a8d814
+  ./fold.dhall
+    sha256:10bb945c25ab3943bd9df5a32e633cbfae112b7d3af38591784687e436a8d814
 ? ./fold.dhall
diff --git a/dhall-lang/Prelude/List/generate b/dhall-lang/Prelude/List/generate
--- a/dhall-lang/Prelude/List/generate
+++ b/dhall-lang/Prelude/List/generate
@@ -1,2 +1,3 @@
-  ./generate.dhall sha256:78ff1ad96c08b88a8263eea7bc8381c078225cfcb759c496f792edb5a5e0b1a4
+  ./generate.dhall
+    sha256:78ff1ad96c08b88a8263eea7bc8381c078225cfcb759c496f792edb5a5e0b1a4
 ? ./generate.dhall
diff --git a/dhall-lang/Prelude/List/head b/dhall-lang/Prelude/List/head
--- a/dhall-lang/Prelude/List/head
+++ b/dhall-lang/Prelude/List/head
@@ -1,2 +1,3 @@
-  ./head.dhall sha256:0d2e65ba0aea908377e46d22020dc3ad970284f4ee4eb8e6b8c51e53038c0026
+  ./head.dhall
+    sha256:0d2e65ba0aea908377e46d22020dc3ad970284f4ee4eb8e6b8c51e53038c0026
 ? ./head.dhall
diff --git a/dhall-lang/Prelude/List/index b/dhall-lang/Prelude/List/index
--- a/dhall-lang/Prelude/List/index
+++ b/dhall-lang/Prelude/List/index
@@ -1,2 +1,3 @@
-  ./index.dhall sha256:e657b55ecae4d899465c3032cb1a64c6aa6dc2aa3034204f3c15ce5c96c03e63
+  ./index.dhall
+    sha256:e657b55ecae4d899465c3032cb1a64c6aa6dc2aa3034204f3c15ce5c96c03e63
 ? ./index.dhall
diff --git a/dhall-lang/Prelude/List/index.dhall b/dhall-lang/Prelude/List/index.dhall
--- a/dhall-lang/Prelude/List/index.dhall
+++ b/dhall-lang/Prelude/List/index.dhall
@@ -1,6 +1,7 @@
 --| Retrieve an element from a `List` using its 0-based index
 let drop =
-        ./drop.dhall sha256:af983ba3ead494dd72beed05c0f3a17c36a4244adedf7ced502c6512196ed0cf
+        ./drop.dhall
+          sha256:af983ba3ead494dd72beed05c0f3a17c36a4244adedf7ced502c6512196ed0cf
       ? ./drop.dhall
 
 let index
diff --git a/dhall-lang/Prelude/List/indexed b/dhall-lang/Prelude/List/indexed
--- a/dhall-lang/Prelude/List/indexed
+++ b/dhall-lang/Prelude/List/indexed
@@ -1,2 +1,3 @@
-  ./indexed.dhall sha256:58bb44457fa81adf26f5123c1b2e8bef0c5aa22dac5fa5ebdfb7da84563b027f
+  ./indexed.dhall
+    sha256:58bb44457fa81adf26f5123c1b2e8bef0c5aa22dac5fa5ebdfb7da84563b027f
 ? ./indexed.dhall
diff --git a/dhall-lang/Prelude/List/iterate b/dhall-lang/Prelude/List/iterate
--- a/dhall-lang/Prelude/List/iterate
+++ b/dhall-lang/Prelude/List/iterate
@@ -1,2 +1,3 @@
-  ./iterate.dhall sha256:e4999ccce190a2e2a6ab9cb188e3af6c40df474087827153005293f11bfe1d26
+  ./iterate.dhall
+    sha256:e4999ccce190a2e2a6ab9cb188e3af6c40df474087827153005293f11bfe1d26
 ? ./iterate.dhall
diff --git a/dhall-lang/Prelude/List/last b/dhall-lang/Prelude/List/last
--- a/dhall-lang/Prelude/List/last
+++ b/dhall-lang/Prelude/List/last
@@ -1,2 +1,3 @@
-  ./last.dhall sha256:741226b741af152a1638491cdff7f3aa74baf080ada2e63429483f3d195a984d
+  ./last.dhall
+    sha256:741226b741af152a1638491cdff7f3aa74baf080ada2e63429483f3d195a984d
 ? ./last.dhall
diff --git a/dhall-lang/Prelude/List/length b/dhall-lang/Prelude/List/length
--- a/dhall-lang/Prelude/List/length
+++ b/dhall-lang/Prelude/List/length
@@ -1,2 +1,3 @@
-  ./length.dhall sha256:42c6812c7a9e3c6e6fad88f77c5b3849503964e071cb784e22c38c888a401461
+  ./length.dhall
+    sha256:42c6812c7a9e3c6e6fad88f77c5b3849503964e071cb784e22c38c888a401461
 ? ./length.dhall
diff --git a/dhall-lang/Prelude/List/map b/dhall-lang/Prelude/List/map
--- a/dhall-lang/Prelude/List/map
+++ b/dhall-lang/Prelude/List/map
@@ -1,2 +1,3 @@
-  ./map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
+  ./map.dhall
+    sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
 ? ./map.dhall
diff --git a/dhall-lang/Prelude/List/null b/dhall-lang/Prelude/List/null
--- a/dhall-lang/Prelude/List/null
+++ b/dhall-lang/Prelude/List/null
@@ -1,2 +1,3 @@
-  ./null.dhall sha256:2338e39637e9a50d66ae1482c0ed559bbcc11e9442bfca8f8c176bbcd9c4fc80
+  ./null.dhall
+    sha256:2338e39637e9a50d66ae1482c0ed559bbcc11e9442bfca8f8c176bbcd9c4fc80
 ? ./null.dhall
diff --git a/dhall-lang/Prelude/List/package.dhall b/dhall-lang/Prelude/List/package.dhall
--- a/dhall-lang/Prelude/List/package.dhall
+++ b/dhall-lang/Prelude/List/package.dhall
@@ -1,85 +1,113 @@
 { all =
-      ./all.dhall sha256:7ac5bb6f77e9ffe9e2356d90968d39764a9a32f75980206e6b12f815bb83dd15
+      ./all.dhall
+        sha256:7ac5bb6f77e9ffe9e2356d90968d39764a9a32f75980206e6b12f815bb83dd15
     ? ./all.dhall
 , any =
-      ./any.dhall sha256:b8e9e13b25e799f342a81f6eda4075906eb1a19dfdcb10a0ca25925eba4033b8
+      ./any.dhall
+        sha256:b8e9e13b25e799f342a81f6eda4075906eb1a19dfdcb10a0ca25925eba4033b8
     ? ./any.dhall
 , build =
-      ./build.dhall sha256:8cf73fc1e115cfcb79bb9cd490bfcbd45c824e93c57a0e64c86c0c72e9ebbe42
+      ./build.dhall
+        sha256:8cf73fc1e115cfcb79bb9cd490bfcbd45c824e93c57a0e64c86c0c72e9ebbe42
     ? ./build.dhall
 , concat =
-      ./concat.dhall sha256:54e43278be13276e03bd1afa89e562e94a0a006377ebea7db14c7562b0de292b
+      ./concat.dhall
+        sha256:54e43278be13276e03bd1afa89e562e94a0a006377ebea7db14c7562b0de292b
     ? ./concat.dhall
 , concatMap =
-      ./concatMap.dhall sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64
+      ./concatMap.dhall
+        sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64
     ? ./concatMap.dhall
 , default =
-      ./default.dhall sha256:fd77809e497227403f42848ffcda05a3efab442d961027c34f3e31d5d24e6379
+      ./default.dhall
+        sha256:fd77809e497227403f42848ffcda05a3efab442d961027c34f3e31d5d24e6379
     ? ./default.dhall
 , drop =
-      ./drop.dhall sha256:af983ba3ead494dd72beed05c0f3a17c36a4244adedf7ced502c6512196ed0cf
+      ./drop.dhall
+        sha256:af983ba3ead494dd72beed05c0f3a17c36a4244adedf7ced502c6512196ed0cf
     ? ./drop.dhall
 , empty =
-      ./empty.dhall sha256:b2f561f35098c457353723c93a22bd5de28d26ecc5370814bef9dfda421e0147
+      ./empty.dhall
+        sha256:b2f561f35098c457353723c93a22bd5de28d26ecc5370814bef9dfda421e0147
     ? ./empty.dhall
 , filter =
-      ./filter.dhall sha256:8ebfede5bbfe09675f246c33eb83964880ac615c4b1be8d856076fdbc4b26ba6
+      ./filter.dhall
+        sha256:8ebfede5bbfe09675f246c33eb83964880ac615c4b1be8d856076fdbc4b26ba6
     ? ./filter.dhall
 , fold =
-      ./fold.dhall sha256:10bb945c25ab3943bd9df5a32e633cbfae112b7d3af38591784687e436a8d814
+      ./fold.dhall
+        sha256:10bb945c25ab3943bd9df5a32e633cbfae112b7d3af38591784687e436a8d814
     ? ./fold.dhall
 , foldLeft =
-      ./foldLeft.dhall sha256:3c6ab57950fe644906b7bbdef0b9523440b6ee17773ebb8cbd41ffacb8bfab61
+      ./foldLeft.dhall
+        sha256:3c6ab57950fe644906b7bbdef0b9523440b6ee17773ebb8cbd41ffacb8bfab61
     ? ./foldLeft.dhall
 , generate =
-      ./generate.dhall sha256:78ff1ad96c08b88a8263eea7bc8381c078225cfcb759c496f792edb5a5e0b1a4
+      ./generate.dhall
+        sha256:78ff1ad96c08b88a8263eea7bc8381c078225cfcb759c496f792edb5a5e0b1a4
     ? ./generate.dhall
 , head =
-      ./head.dhall sha256:0d2e65ba0aea908377e46d22020dc3ad970284f4ee4eb8e6b8c51e53038c0026
+      ./head.dhall
+        sha256:0d2e65ba0aea908377e46d22020dc3ad970284f4ee4eb8e6b8c51e53038c0026
     ? ./head.dhall
 , index =
-      ./index.dhall sha256:e657b55ecae4d899465c3032cb1a64c6aa6dc2aa3034204f3c15ce5c96c03e63
+      ./index.dhall
+        sha256:e657b55ecae4d899465c3032cb1a64c6aa6dc2aa3034204f3c15ce5c96c03e63
     ? ./index.dhall
 , indexed =
-      ./indexed.dhall sha256:58bb44457fa81adf26f5123c1b2e8bef0c5aa22dac5fa5ebdfb7da84563b027f
+      ./indexed.dhall
+        sha256:58bb44457fa81adf26f5123c1b2e8bef0c5aa22dac5fa5ebdfb7da84563b027f
     ? ./indexed.dhall
 , iterate =
-      ./iterate.dhall sha256:e4999ccce190a2e2a6ab9cb188e3af6c40df474087827153005293f11bfe1d26
+      ./iterate.dhall
+        sha256:e4999ccce190a2e2a6ab9cb188e3af6c40df474087827153005293f11bfe1d26
     ? ./iterate.dhall
 , last =
-      ./last.dhall sha256:741226b741af152a1638491cdff7f3aa74baf080ada2e63429483f3d195a984d
+      ./last.dhall
+        sha256:741226b741af152a1638491cdff7f3aa74baf080ada2e63429483f3d195a984d
     ? ./last.dhall
 , length =
-      ./length.dhall sha256:42c6812c7a9e3c6e6fad88f77c5b3849503964e071cb784e22c38c888a401461
+      ./length.dhall
+        sha256:42c6812c7a9e3c6e6fad88f77c5b3849503964e071cb784e22c38c888a401461
     ? ./length.dhall
 , map =
-      ./map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
+      ./map.dhall
+        sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
     ? ./map.dhall
 , null =
-      ./null.dhall sha256:2338e39637e9a50d66ae1482c0ed559bbcc11e9442bfca8f8c176bbcd9c4fc80
+      ./null.dhall
+        sha256:2338e39637e9a50d66ae1482c0ed559bbcc11e9442bfca8f8c176bbcd9c4fc80
     ? ./null.dhall
 , partition =
-      ./partition.dhall sha256:38147ac6d750a6492736dd90cc967bf09aa405c499de943c64fab7b86ae02f03
+      ./partition.dhall
+        sha256:38147ac6d750a6492736dd90cc967bf09aa405c499de943c64fab7b86ae02f03
     ? ./partition.dhall
 , replicate =
-      ./replicate.dhall sha256:d4250b45278f2d692302489ac3e78280acb238d27541c837ce46911ff3baa347
+      ./replicate.dhall
+        sha256:d4250b45278f2d692302489ac3e78280acb238d27541c837ce46911ff3baa347
     ? ./replicate.dhall
 , reverse =
-      ./reverse.dhall sha256:ad99d224d61852de6696da5a7d04c98dbe676fe67d5e4ef4f19e9aaa27006e9d
+      ./reverse.dhall
+        sha256:ad99d224d61852de6696da5a7d04c98dbe676fe67d5e4ef4f19e9aaa27006e9d
     ? ./reverse.dhall
 , shifted =
-      ./shifted.dhall sha256:54fb22c7e952ebce1cfc0fcdd33ce4cfa817bff9d6564af268dea6685f8b5dfe
+      ./shifted.dhall
+        sha256:54fb22c7e952ebce1cfc0fcdd33ce4cfa817bff9d6564af268dea6685f8b5dfe
     ? ./shifted.dhall
 , take =
-      ./take.dhall sha256:b3e08ee8c3a5bf3d8ccee6b2b2008fbb8e51e7373aef6f1af67ad10078c9fbfa
+      ./take.dhall
+        sha256:b3e08ee8c3a5bf3d8ccee6b2b2008fbb8e51e7373aef6f1af67ad10078c9fbfa
     ? ./take.dhall
 , unpackOptionals =
-      ./unpackOptionals.dhall sha256:0cbaa920f429cf7fc3907f8a9143203fe948883913560e6e1043223e6b3d05e4
+      ./unpackOptionals.dhall
+        sha256:0cbaa920f429cf7fc3907f8a9143203fe948883913560e6e1043223e6b3d05e4
     ? ./unpackOptionals.dhall
 , unzip =
-      ./unzip.dhall sha256:4d6003e9e683a289fe33f4c90f958eb1e08ea0bbb474210fcd90d1885c9660e9
+      ./unzip.dhall
+        sha256:4d6003e9e683a289fe33f4c90f958eb1e08ea0bbb474210fcd90d1885c9660e9
     ? ./unzip.dhall
 , zip =
-      ./zip.dhall sha256:85ed955eabf3998767f4ad2a28e57d40cd4c68a95519d79e9b622f1d26d979da
+      ./zip.dhall
+        sha256:85ed955eabf3998767f4ad2a28e57d40cd4c68a95519d79e9b622f1d26d979da
     ? ./zip.dhall
 }
diff --git a/dhall-lang/Prelude/List/partition b/dhall-lang/Prelude/List/partition
--- a/dhall-lang/Prelude/List/partition
+++ b/dhall-lang/Prelude/List/partition
@@ -1,2 +1,3 @@
-  ./partition.dhall sha256:38147ac6d750a6492736dd90cc967bf09aa405c499de943c64fab7b86ae02f03
+  ./partition.dhall
+    sha256:38147ac6d750a6492736dd90cc967bf09aa405c499de943c64fab7b86ae02f03
 ? ./partition.dhall
diff --git a/dhall-lang/Prelude/List/replicate b/dhall-lang/Prelude/List/replicate
--- a/dhall-lang/Prelude/List/replicate
+++ b/dhall-lang/Prelude/List/replicate
@@ -1,2 +1,3 @@
-  ./replicate.dhall sha256:d4250b45278f2d692302489ac3e78280acb238d27541c837ce46911ff3baa347
+  ./replicate.dhall
+    sha256:d4250b45278f2d692302489ac3e78280acb238d27541c837ce46911ff3baa347
 ? ./replicate.dhall
diff --git a/dhall-lang/Prelude/List/reverse b/dhall-lang/Prelude/List/reverse
--- a/dhall-lang/Prelude/List/reverse
+++ b/dhall-lang/Prelude/List/reverse
@@ -1,2 +1,3 @@
-  ./reverse.dhall sha256:ad99d224d61852de6696da5a7d04c98dbe676fe67d5e4ef4f19e9aaa27006e9d
+  ./reverse.dhall
+    sha256:ad99d224d61852de6696da5a7d04c98dbe676fe67d5e4ef4f19e9aaa27006e9d
 ? ./reverse.dhall
diff --git a/dhall-lang/Prelude/List/shifted b/dhall-lang/Prelude/List/shifted
--- a/dhall-lang/Prelude/List/shifted
+++ b/dhall-lang/Prelude/List/shifted
@@ -1,2 +1,3 @@
-  ./shifted.dhall sha256:54fb22c7e952ebce1cfc0fcdd33ce4cfa817bff9d6564af268dea6685f8b5dfe
+  ./shifted.dhall
+    sha256:54fb22c7e952ebce1cfc0fcdd33ce4cfa817bff9d6564af268dea6685f8b5dfe
 ? ./shifted.dhall
diff --git a/dhall-lang/Prelude/List/take b/dhall-lang/Prelude/List/take
--- a/dhall-lang/Prelude/List/take
+++ b/dhall-lang/Prelude/List/take
@@ -1,2 +1,3 @@
-  ./take.dhall sha256:b3e08ee8c3a5bf3d8ccee6b2b2008fbb8e51e7373aef6f1af67ad10078c9fbfa
+  ./take.dhall
+    sha256:b3e08ee8c3a5bf3d8ccee6b2b2008fbb8e51e7373aef6f1af67ad10078c9fbfa
 ? ./take.dhall
diff --git a/dhall-lang/Prelude/List/take.dhall b/dhall-lang/Prelude/List/take.dhall
--- a/dhall-lang/Prelude/List/take.dhall
+++ b/dhall-lang/Prelude/List/take.dhall
@@ -1,6 +1,7 @@
 --| Truncate a list to the first `n` elements
 let Natural/lessThan =
-        ../Natural/lessThan.dhall sha256:3381b66749290769badf8855d8a3f4af62e8de52d1364d838a9d1e20c94fa70c
+        ../Natural/lessThan.dhall
+          sha256:3381b66749290769badf8855d8a3f4af62e8de52d1364d838a9d1e20c94fa70c
       ? ../Natural/lessThan.dhall
 
 let take
diff --git a/dhall-lang/Prelude/List/unpackOptionals b/dhall-lang/Prelude/List/unpackOptionals
--- a/dhall-lang/Prelude/List/unpackOptionals
+++ b/dhall-lang/Prelude/List/unpackOptionals
@@ -1,2 +1,3 @@
-  ./unpackOptionals.dhall sha256:0cbaa920f429cf7fc3907f8a9143203fe948883913560e6e1043223e6b3d05e4
+  ./unpackOptionals.dhall
+    sha256:0cbaa920f429cf7fc3907f8a9143203fe948883913560e6e1043223e6b3d05e4
 ? ./unpackOptionals.dhall
diff --git a/dhall-lang/Prelude/List/unpackOptionals.dhall b/dhall-lang/Prelude/List/unpackOptionals.dhall
--- a/dhall-lang/Prelude/List/unpackOptionals.dhall
+++ b/dhall-lang/Prelude/List/unpackOptionals.dhall
@@ -1,10 +1,12 @@
 --| Unpack Optionals in a List, omitting None items.
 let List/concatMap =
-        ./concatMap.dhall sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64
+        ./concatMap.dhall
+          sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64
       ? ./concatMap.dhall
 
 let Optional/toList =
-        ../Optional/toList.dhall sha256:d78f160c619119ef12389e48a629ce293d69f7624c8d016b7a4767ab400344c4
+        ../Optional/toList.dhall
+          sha256:d78f160c619119ef12389e48a629ce293d69f7624c8d016b7a4767ab400344c4
       ? ../Optional/toList.dhall
 
 let unpackOptionals
diff --git a/dhall-lang/Prelude/List/unzip b/dhall-lang/Prelude/List/unzip
--- a/dhall-lang/Prelude/List/unzip
+++ b/dhall-lang/Prelude/List/unzip
@@ -1,2 +1,3 @@
-  ./unzip.dhall sha256:4d6003e9e683a289fe33f4c90f958eb1e08ea0bbb474210fcd90d1885c9660e9
+  ./unzip.dhall
+    sha256:4d6003e9e683a289fe33f4c90f958eb1e08ea0bbb474210fcd90d1885c9660e9
 ? ./unzip.dhall
diff --git a/dhall-lang/Prelude/List/zip b/dhall-lang/Prelude/List/zip
--- a/dhall-lang/Prelude/List/zip
+++ b/dhall-lang/Prelude/List/zip
@@ -1,2 +1,3 @@
-  ./zip.dhall sha256:85ed955eabf3998767f4ad2a28e57d40cd4c68a95519d79e9b622f1d26d979da
+  ./zip.dhall
+    sha256:85ed955eabf3998767f4ad2a28e57d40cd4c68a95519d79e9b622f1d26d979da
 ? ./zip.dhall
diff --git a/dhall-lang/Prelude/List/zip.dhall b/dhall-lang/Prelude/List/zip.dhall
--- a/dhall-lang/Prelude/List/zip.dhall
+++ b/dhall-lang/Prelude/List/zip.dhall
@@ -4,7 +4,8 @@
 The resulting `List` will have the length of the shortest of its arguments.
 -}
 let List/index =
-        ./index.dhall sha256:e657b55ecae4d899465c3032cb1a64c6aa6dc2aa3034204f3c15ce5c96c03e63
+        ./index.dhall
+          sha256:e657b55ecae4d899465c3032cb1a64c6aa6dc2aa3034204f3c15ce5c96c03e63
       ? ./index.dhall
 
 let zip
diff --git a/dhall-lang/Prelude/Location/Type b/dhall-lang/Prelude/Location/Type
--- a/dhall-lang/Prelude/Location/Type
+++ b/dhall-lang/Prelude/Location/Type
@@ -1,2 +1,3 @@
-  ./Type.dhall sha256:613ebb491aeef4ff06368058b4f0e6e3bb8a58d8c145131fc0b947aac045a529
+  ./Type.dhall
+    sha256:613ebb491aeef4ff06368058b4f0e6e3bb8a58d8c145131fc0b947aac045a529
 ? ./Type.dhall
diff --git a/dhall-lang/Prelude/Location/Type.dhall b/dhall-lang/Prelude/Location/Type.dhall
--- a/dhall-lang/Prelude/Location/Type.dhall
+++ b/dhall-lang/Prelude/Location/Type.dhall
@@ -5,7 +5,8 @@
 
 let example0 =
         assert
-      :     missing sha256:f428188ff9d77ea15bc2bcd0da3f8ed81b304e175b07ade42a3b0fb02941b2aa as Location
+      :     missing
+              sha256:f428188ff9d77ea15bc2bcd0da3f8ed81b304e175b07ade42a3b0fb02941b2aa as Location
           ? missing as Location
         ≡ < Environment : Text
           | Local : Text
diff --git a/dhall-lang/Prelude/Location/package.dhall b/dhall-lang/Prelude/Location/package.dhall
--- a/dhall-lang/Prelude/Location/package.dhall
+++ b/dhall-lang/Prelude/Location/package.dhall
@@ -1,4 +1,5 @@
 { Type =
-      ./Type.dhall sha256:613ebb491aeef4ff06368058b4f0e6e3bb8a58d8c145131fc0b947aac045a529
+      ./Type.dhall
+        sha256:613ebb491aeef4ff06368058b4f0e6e3bb8a58d8c145131fc0b947aac045a529
     ? ./Type.dhall
 }
diff --git a/dhall-lang/Prelude/Map/Entry b/dhall-lang/Prelude/Map/Entry
--- a/dhall-lang/Prelude/Map/Entry
+++ b/dhall-lang/Prelude/Map/Entry
@@ -1,2 +1,3 @@
-  ./Entry.dhall sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346
+  ./Entry.dhall
+    sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346
 ? ./Entry.dhall
diff --git a/dhall-lang/Prelude/Map/Type b/dhall-lang/Prelude/Map/Type
--- a/dhall-lang/Prelude/Map/Type
+++ b/dhall-lang/Prelude/Map/Type
@@ -1,2 +1,3 @@
-  ./Type.dhall sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed
+  ./Type.dhall
+    sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed
 ? ./Type.dhall
diff --git a/dhall-lang/Prelude/Map/empty b/dhall-lang/Prelude/Map/empty
--- a/dhall-lang/Prelude/Map/empty
+++ b/dhall-lang/Prelude/Map/empty
@@ -1,2 +1,3 @@
-  ./empty.dhall sha256:4c612558b8bbe8f955550ed3fb295d57b1b864c85cd52615b52d0ee0e9682e52
+  ./empty.dhall
+    sha256:4c612558b8bbe8f955550ed3fb295d57b1b864c85cd52615b52d0ee0e9682e52
 ? ./empty.dhall
diff --git a/dhall-lang/Prelude/Map/empty.dhall b/dhall-lang/Prelude/Map/empty.dhall
--- a/dhall-lang/Prelude/Map/empty.dhall
+++ b/dhall-lang/Prelude/Map/empty.dhall
@@ -1,6 +1,7 @@
 --| An empty `Map` of the given key and value types
 let Map =
-        ./Type.dhall sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed
+        ./Type.dhall
+          sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed
       ? ./Type.dhall
 
 let empty
diff --git a/dhall-lang/Prelude/Map/keyText b/dhall-lang/Prelude/Map/keyText
--- a/dhall-lang/Prelude/Map/keyText
+++ b/dhall-lang/Prelude/Map/keyText
@@ -1,2 +1,3 @@
-  ./keyText.dhall sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc
+  ./keyText.dhall
+    sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc
 ? ./keyText.dhall
diff --git a/dhall-lang/Prelude/Map/keyValue b/dhall-lang/Prelude/Map/keyValue
--- a/dhall-lang/Prelude/Map/keyValue
+++ b/dhall-lang/Prelude/Map/keyValue
@@ -1,2 +1,3 @@
-  ./keyValue.dhall sha256:a0a97199d280c4cce72ffcbbf93b7ceda0a569cf4d173ac98e0aaaa78034b98c
+  ./keyValue.dhall
+    sha256:a0a97199d280c4cce72ffcbbf93b7ceda0a569cf4d173ac98e0aaaa78034b98c
 ? ./keyValue.dhall
diff --git a/dhall-lang/Prelude/Map/keys b/dhall-lang/Prelude/Map/keys
--- a/dhall-lang/Prelude/Map/keys
+++ b/dhall-lang/Prelude/Map/keys
@@ -1,2 +1,3 @@
-  ./keys.dhall sha256:d13ec34e6acf7c349d82272ef09a37c7bdf37f0dab489e9df47a1ff215d9f5e7
+  ./keys.dhall
+    sha256:d13ec34e6acf7c349d82272ef09a37c7bdf37f0dab489e9df47a1ff215d9f5e7
 ? ./keys.dhall
diff --git a/dhall-lang/Prelude/Map/keys.dhall b/dhall-lang/Prelude/Map/keys.dhall
--- a/dhall-lang/Prelude/Map/keys.dhall
+++ b/dhall-lang/Prelude/Map/keys.dhall
@@ -1,14 +1,17 @@
 --| Get all of the keys of a `Map` as a `List`
 let Map =
-        ./Type.dhall sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed
+        ./Type.dhall
+          sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed
       ? ./Type.dhall
 
 let Entry =
-        ./Entry.dhall sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346
+        ./Entry.dhall
+          sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346
       ? ./Entry.dhall
 
 let List/map =
-        ../List/map sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
+        ../List/map
+          sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
       ? ../List/map
 
 let keys
diff --git a/dhall-lang/Prelude/Map/map b/dhall-lang/Prelude/Map/map
--- a/dhall-lang/Prelude/Map/map
+++ b/dhall-lang/Prelude/Map/map
@@ -1,2 +1,3 @@
-  ./map.dhall sha256:23e09b0b9f08649797dfe1ca39755d5e1c7cad2d0944bdd36c7a0bf804bde8d0
+  ./map.dhall
+    sha256:23e09b0b9f08649797dfe1ca39755d5e1c7cad2d0944bdd36c7a0bf804bde8d0
 ? ./map.dhall
diff --git a/dhall-lang/Prelude/Map/map.dhall b/dhall-lang/Prelude/Map/map.dhall
--- a/dhall-lang/Prelude/Map/map.dhall
+++ b/dhall-lang/Prelude/Map/map.dhall
@@ -1,14 +1,17 @@
 --| Transform a `Map` by applying a function to each value
 let Map =
-        ./Type.dhall sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed
+        ./Type.dhall
+          sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed
       ? ./Type.dhall
 
 let Entry =
-        ./Entry.dhall sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346
+        ./Entry.dhall
+          sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346
       ? ./Entry.dhall
 
 let List/map =
-        ../List/map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
+        ../List/map.dhall
+          sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
       ? ../List/map.dhall
 
 let map
diff --git a/dhall-lang/Prelude/Map/package.dhall b/dhall-lang/Prelude/Map/package.dhall
--- a/dhall-lang/Prelude/Map/package.dhall
+++ b/dhall-lang/Prelude/Map/package.dhall
@@ -1,28 +1,37 @@
 { Type =
-      ./Type sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed
+      ./Type
+        sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed
     ? ./Type
 , Entry =
-      ./Entry sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346
+      ./Entry
+        sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346
     ? ./Entry
 , empty =
-      ./empty sha256:4c612558b8bbe8f955550ed3fb295d57b1b864c85cd52615b52d0ee0e9682e52
+      ./empty
+        sha256:4c612558b8bbe8f955550ed3fb295d57b1b864c85cd52615b52d0ee0e9682e52
     ? ./empty
 , keyText =
-      ./keyText sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc
+      ./keyText
+        sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc
     ? ./keyText
 , keyValue =
-      ./keyValue sha256:a0a97199d280c4cce72ffcbbf93b7ceda0a569cf4d173ac98e0aaaa78034b98c
+      ./keyValue
+        sha256:a0a97199d280c4cce72ffcbbf93b7ceda0a569cf4d173ac98e0aaaa78034b98c
     ? ./keyValue
 , keys =
-      ./keys sha256:d13ec34e6acf7c349d82272ef09a37c7bdf37f0dab489e9df47a1ff215d9f5e7
+      ./keys
+        sha256:d13ec34e6acf7c349d82272ef09a37c7bdf37f0dab489e9df47a1ff215d9f5e7
     ? ./keys
 , map =
-      ./map sha256:23e09b0b9f08649797dfe1ca39755d5e1c7cad2d0944bdd36c7a0bf804bde8d0
+      ./map
+        sha256:23e09b0b9f08649797dfe1ca39755d5e1c7cad2d0944bdd36c7a0bf804bde8d0
     ? ./map
 , unpackOptionals =
-      ./unpackOptionals.dhall sha256:66c3e6f6f81418cf99342e1dba739617c01af4b27c1ca5e2e1d7bce64a522e22
+      ./unpackOptionals.dhall
+        sha256:66c3e6f6f81418cf99342e1dba739617c01af4b27c1ca5e2e1d7bce64a522e22
     ? ./unpackOptionals.dhall
 , values =
-      ./values sha256:ae02cfb06a9307cbecc06130e84fd0c7b96b7f1f11648961e1b030ec00940be8
+      ./values
+        sha256:ae02cfb06a9307cbecc06130e84fd0c7b96b7f1f11648961e1b030ec00940be8
     ? ./values
 }
diff --git a/dhall-lang/Prelude/Map/unpackOptionals.dhall b/dhall-lang/Prelude/Map/unpackOptionals.dhall
--- a/dhall-lang/Prelude/Map/unpackOptionals.dhall
+++ b/dhall-lang/Prelude/Map/unpackOptionals.dhall
@@ -1,15 +1,18 @@
 --| Turn a `Map k (Optional v)` into a `Map k v` by dropping all
 --  entries with value `None`.
 let List/concatMap =
-        ../List/concatMap.dhall sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64
+        ../List/concatMap.dhall
+          sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64
       ? ../List/concatMap.dhall
 
 let Map/Entry =
-        ./Entry.dhall sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346
+        ./Entry.dhall
+          sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346
       ? ./Entry.dhall
 
 let Map/Type =
-        ./Type.dhall sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed
+        ./Type.dhall
+          sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed
       ? ./Type.dhall
 
 let unpackOptionals
diff --git a/dhall-lang/Prelude/Map/values b/dhall-lang/Prelude/Map/values
--- a/dhall-lang/Prelude/Map/values
+++ b/dhall-lang/Prelude/Map/values
@@ -1,2 +1,3 @@
-  ./values.dhall sha256:ae02cfb06a9307cbecc06130e84fd0c7b96b7f1f11648961e1b030ec00940be8
+  ./values.dhall
+    sha256:ae02cfb06a9307cbecc06130e84fd0c7b96b7f1f11648961e1b030ec00940be8
 ? ./values.dhall
diff --git a/dhall-lang/Prelude/Map/values.dhall b/dhall-lang/Prelude/Map/values.dhall
--- a/dhall-lang/Prelude/Map/values.dhall
+++ b/dhall-lang/Prelude/Map/values.dhall
@@ -1,14 +1,17 @@
 --| Get all of the values of a `Map` as a `List`
 let Map =
-        ./Type.dhall sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed
+        ./Type.dhall
+          sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed
       ? ./Type.dhall
 
 let Entry =
-        ./Entry.dhall sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346
+        ./Entry.dhall
+          sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346
       ? ./Entry.dhall
 
 let List/map =
-        ../List/map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
+        ../List/map.dhall
+          sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
       ? ../List/map.dhall
 
 let values
diff --git a/dhall-lang/Prelude/Monoid b/dhall-lang/Prelude/Monoid
--- a/dhall-lang/Prelude/Monoid
+++ b/dhall-lang/Prelude/Monoid
@@ -1,2 +1,3 @@
-  ./Monoid.dhall sha256:26fafa098600ef7a54ef9dba5ada416bbbdd21df1af306c052420c61553ad4af
+  ./Monoid.dhall
+    sha256:26fafa098600ef7a54ef9dba5ada416bbbdd21df1af306c052420c61553ad4af
 ? ./Monoid.dhall
diff --git a/dhall-lang/Prelude/Natural/build b/dhall-lang/Prelude/Natural/build
--- a/dhall-lang/Prelude/Natural/build
+++ b/dhall-lang/Prelude/Natural/build
@@ -1,2 +1,3 @@
-  ./build.dhall sha256:e7e25e6c4f1d8e573606ed1bef725396ac2de5c68f7c5d329ffc5822085b984c
+  ./build.dhall
+    sha256:e7e25e6c4f1d8e573606ed1bef725396ac2de5c68f7c5d329ffc5822085b984c
 ? ./build.dhall
diff --git a/dhall-lang/Prelude/Natural/enumerate b/dhall-lang/Prelude/Natural/enumerate
--- a/dhall-lang/Prelude/Natural/enumerate
+++ b/dhall-lang/Prelude/Natural/enumerate
@@ -1,2 +1,3 @@
-  ./enumerate.dhall sha256:0cf083980a752b21ce0df9fc2222a4c139f50909e2353576e26a191002aa1ce3
+  ./enumerate.dhall
+    sha256:0cf083980a752b21ce0df9fc2222a4c139f50909e2353576e26a191002aa1ce3
 ? ./enumerate.dhall
diff --git a/dhall-lang/Prelude/Natural/equal b/dhall-lang/Prelude/Natural/equal
--- a/dhall-lang/Prelude/Natural/equal
+++ b/dhall-lang/Prelude/Natural/equal
@@ -1,2 +1,3 @@
-  ./equal.dhall sha256:7f108edfa35ddc7cebafb24dc073478e93a802e13b5bc3fd22f4768c9b066e60
+  ./equal.dhall
+    sha256:7f108edfa35ddc7cebafb24dc073478e93a802e13b5bc3fd22f4768c9b066e60
 ? ./equal.dhall
diff --git a/dhall-lang/Prelude/Natural/equal.dhall b/dhall-lang/Prelude/Natural/equal.dhall
--- a/dhall-lang/Prelude/Natural/equal.dhall
+++ b/dhall-lang/Prelude/Natural/equal.dhall
@@ -1,6 +1,7 @@
 --| `equal` checks if two Naturals are equal.
 let lessThanEqual =
-        ./lessThanEqual.dhall sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99
+        ./lessThanEqual.dhall
+          sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99
       ? ./lessThanEqual.dhall
 
 let equal
diff --git a/dhall-lang/Prelude/Natural/even b/dhall-lang/Prelude/Natural/even
--- a/dhall-lang/Prelude/Natural/even
+++ b/dhall-lang/Prelude/Natural/even
@@ -1,2 +1,3 @@
-  ./even.dhall sha256:b85b8b56892dfef881e1c0e79eade0b949528f792aac0ea42432b315ede4ee66
+  ./even.dhall
+    sha256:b85b8b56892dfef881e1c0e79eade0b949528f792aac0ea42432b315ede4ee66
 ? ./even.dhall
diff --git a/dhall-lang/Prelude/Natural/fold b/dhall-lang/Prelude/Natural/fold
--- a/dhall-lang/Prelude/Natural/fold
+++ b/dhall-lang/Prelude/Natural/fold
@@ -1,2 +1,3 @@
-  ./fold.dhall sha256:fd01c931e585a8f5fd049af7b076b862ea164f1813b34800c7616a49e549ee06
+  ./fold.dhall
+    sha256:fd01c931e585a8f5fd049af7b076b862ea164f1813b34800c7616a49e549ee06
 ? ./fold.dhall
diff --git a/dhall-lang/Prelude/Natural/greaterThan b/dhall-lang/Prelude/Natural/greaterThan
--- a/dhall-lang/Prelude/Natural/greaterThan
+++ b/dhall-lang/Prelude/Natural/greaterThan
@@ -1,2 +1,3 @@
-  ./greaterThan.dhall sha256:f702abcdfcd7ad73619b9285d7e41c3a1d017fb6b8d037cf40bd93bf30c09b2c
+  ./greaterThan.dhall
+    sha256:f702abcdfcd7ad73619b9285d7e41c3a1d017fb6b8d037cf40bd93bf30c09b2c
 ? ./greaterThan.dhall
diff --git a/dhall-lang/Prelude/Natural/greaterThan.dhall b/dhall-lang/Prelude/Natural/greaterThan.dhall
--- a/dhall-lang/Prelude/Natural/greaterThan.dhall
+++ b/dhall-lang/Prelude/Natural/greaterThan.dhall
@@ -1,6 +1,7 @@
 --| `greaterThan` checks if one Natural is strictly greater than another.
 let lessThan =
-        ./lessThan.dhall sha256:3381b66749290769badf8855d8a3f4af62e8de52d1364d838a9d1e20c94fa70c
+        ./lessThan.dhall
+          sha256:3381b66749290769badf8855d8a3f4af62e8de52d1364d838a9d1e20c94fa70c
       ? ./lessThan.dhall
 
 let greaterThan
diff --git a/dhall-lang/Prelude/Natural/greaterThanEqual b/dhall-lang/Prelude/Natural/greaterThanEqual
--- a/dhall-lang/Prelude/Natural/greaterThanEqual
+++ b/dhall-lang/Prelude/Natural/greaterThanEqual
@@ -1,2 +1,3 @@
-  ./greaterThanEqual.dhall sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4
+  ./greaterThanEqual.dhall
+    sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4
 ? ./greaterThanEqual.dhall
diff --git a/dhall-lang/Prelude/Natural/greaterThanEqual.dhall b/dhall-lang/Prelude/Natural/greaterThanEqual.dhall
--- a/dhall-lang/Prelude/Natural/greaterThanEqual.dhall
+++ b/dhall-lang/Prelude/Natural/greaterThanEqual.dhall
@@ -2,7 +2,8 @@
 `greaterThanEqual` checks if one Natural is greater than or equal to another.
 -}
 let lessThanEqual =
-        ./lessThanEqual.dhall sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99
+        ./lessThanEqual.dhall
+          sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99
       ? ./lessThanEqual.dhall
 
 let greaterThanEqual
diff --git a/dhall-lang/Prelude/Natural/isZero b/dhall-lang/Prelude/Natural/isZero
--- a/dhall-lang/Prelude/Natural/isZero
+++ b/dhall-lang/Prelude/Natural/isZero
@@ -1,2 +1,3 @@
-  ./isZero.dhall sha256:1be98236800ed2d5cff44f16ca02b34b0c37dfa239d9e0d63d9d2c6eeae3d1d1
+  ./isZero.dhall
+    sha256:1be98236800ed2d5cff44f16ca02b34b0c37dfa239d9e0d63d9d2c6eeae3d1d1
 ? ./isZero.dhall
diff --git a/dhall-lang/Prelude/Natural/lessThan b/dhall-lang/Prelude/Natural/lessThan
--- a/dhall-lang/Prelude/Natural/lessThan
+++ b/dhall-lang/Prelude/Natural/lessThan
@@ -1,2 +1,3 @@
-  ./lessThan.dhall sha256:3381b66749290769badf8855d8a3f4af62e8de52d1364d838a9d1e20c94fa70c
+  ./lessThan.dhall
+    sha256:3381b66749290769badf8855d8a3f4af62e8de52d1364d838a9d1e20c94fa70c
 ? ./lessThan.dhall
diff --git a/dhall-lang/Prelude/Natural/lessThan.dhall b/dhall-lang/Prelude/Natural/lessThan.dhall
--- a/dhall-lang/Prelude/Natural/lessThan.dhall
+++ b/dhall-lang/Prelude/Natural/lessThan.dhall
@@ -1,10 +1,12 @@
 --| `lessThan` checks if one Natural is strictly less than another.
 let greaterThanEqual =
-        ./greaterThanEqual.dhall sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4
+        ./greaterThanEqual.dhall
+          sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4
       ? ./greaterThanEqual.dhall
 
 let Bool/not =
-        ../Bool/not.dhall sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4
+        ../Bool/not.dhall
+          sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4
       ? ../Bool/not.dhall
 
 let lessThan
diff --git a/dhall-lang/Prelude/Natural/lessThanEqual b/dhall-lang/Prelude/Natural/lessThanEqual
--- a/dhall-lang/Prelude/Natural/lessThanEqual
+++ b/dhall-lang/Prelude/Natural/lessThanEqual
@@ -1,2 +1,3 @@
-  ./lessThanEqual.dhall sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99
+  ./lessThanEqual.dhall
+    sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99
 ? ./lessThanEqual.dhall
diff --git a/dhall-lang/Prelude/Natural/listMax b/dhall-lang/Prelude/Natural/listMax
--- a/dhall-lang/Prelude/Natural/listMax
+++ b/dhall-lang/Prelude/Natural/listMax
@@ -1,2 +1,3 @@
-  ./listMax.dhall sha256:20906ffcc9970f740106d4516cb7868b43d75ff8c9f00ff8a9680ae68c48a472
+  ./listMax.dhall
+    sha256:20906ffcc9970f740106d4516cb7868b43d75ff8c9f00ff8a9680ae68c48a472
 ? ./listMax.dhall
diff --git a/dhall-lang/Prelude/Natural/listMax.dhall b/dhall-lang/Prelude/Natural/listMax.dhall
--- a/dhall-lang/Prelude/Natural/listMax.dhall
+++ b/dhall-lang/Prelude/Natural/listMax.dhall
@@ -3,11 +3,13 @@
 `List` is empty
 -}
 let max =
-        ./max.dhall sha256:1f3b18da330223ab039fad11693da72c7e68d516f50502c73f41a89a097b62f7
+        ./max.dhall
+          sha256:1f3b18da330223ab039fad11693da72c7e68d516f50502c73f41a89a097b62f7
       ? ./max.dhall
 
 let Optional/map =
-        ../Optional/map.dhall sha256:501534192d988218d43261c299cc1d1e0b13d25df388937add784778ab0054fa
+        ../Optional/map.dhall
+          sha256:501534192d988218d43261c299cc1d1e0b13d25df388937add784778ab0054fa
       ? ../Optional/map.dhall
 
 let listMax
diff --git a/dhall-lang/Prelude/Natural/listMin b/dhall-lang/Prelude/Natural/listMin
--- a/dhall-lang/Prelude/Natural/listMin
+++ b/dhall-lang/Prelude/Natural/listMin
@@ -1,2 +1,3 @@
-  ./listMin.dhall sha256:ee70b0d010bbca6012162e8ae1f6e9d9bd10a152675509b0f23145b98b5d43c6
+  ./listMin.dhall
+    sha256:ee70b0d010bbca6012162e8ae1f6e9d9bd10a152675509b0f23145b98b5d43c6
 ? ./listMin.dhall
diff --git a/dhall-lang/Prelude/Natural/listMin.dhall b/dhall-lang/Prelude/Natural/listMin.dhall
--- a/dhall-lang/Prelude/Natural/listMin.dhall
+++ b/dhall-lang/Prelude/Natural/listMin.dhall
@@ -3,11 +3,13 @@
 `List` is empty
 -}
 let min =
-        ./min.dhall sha256:f25f9c462e4dbf0eb15f9ff6ac840c6e9c82255a7f4f2ab408bdab338e028710
+        ./min.dhall
+          sha256:f25f9c462e4dbf0eb15f9ff6ac840c6e9c82255a7f4f2ab408bdab338e028710
       ? ./min.dhall
 
 let Optional/map =
-        ../Optional/map.dhall sha256:501534192d988218d43261c299cc1d1e0b13d25df388937add784778ab0054fa
+        ../Optional/map.dhall
+          sha256:501534192d988218d43261c299cc1d1e0b13d25df388937add784778ab0054fa
       ? ../Optional/map.dhall
 
 let listMin
diff --git a/dhall-lang/Prelude/Natural/max b/dhall-lang/Prelude/Natural/max
--- a/dhall-lang/Prelude/Natural/max
+++ b/dhall-lang/Prelude/Natural/max
@@ -1,2 +1,3 @@
-  ./max.dhall sha256:1f3b18da330223ab039fad11693da72c7e68d516f50502c73f41a89a097b62f7
+  ./max.dhall
+    sha256:1f3b18da330223ab039fad11693da72c7e68d516f50502c73f41a89a097b62f7
 ? ./max.dhall
diff --git a/dhall-lang/Prelude/Natural/max.dhall b/dhall-lang/Prelude/Natural/max.dhall
--- a/dhall-lang/Prelude/Natural/max.dhall
+++ b/dhall-lang/Prelude/Natural/max.dhall
@@ -1,6 +1,7 @@
 --| `max a b` returns the larger of `a` or `b`
 let lessThanEqual =
-        ./lessThanEqual.dhall sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99
+        ./lessThanEqual.dhall
+          sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99
       ? ./lessThanEqual.dhall
 
 let max
diff --git a/dhall-lang/Prelude/Natural/min b/dhall-lang/Prelude/Natural/min
--- a/dhall-lang/Prelude/Natural/min
+++ b/dhall-lang/Prelude/Natural/min
@@ -1,2 +1,3 @@
-  ./min.dhall sha256:f25f9c462e4dbf0eb15f9ff6ac840c6e9c82255a7f4f2ab408bdab338e028710
+  ./min.dhall
+    sha256:f25f9c462e4dbf0eb15f9ff6ac840c6e9c82255a7f4f2ab408bdab338e028710
 ? ./min.dhall
diff --git a/dhall-lang/Prelude/Natural/min.dhall b/dhall-lang/Prelude/Natural/min.dhall
--- a/dhall-lang/Prelude/Natural/min.dhall
+++ b/dhall-lang/Prelude/Natural/min.dhall
@@ -1,6 +1,7 @@
 --| `min a b` returns the smaller of `a` or `b`
 let lessThanEqual =
-        ./lessThanEqual.dhall sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99
+        ./lessThanEqual.dhall
+          sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99
       ? ./lessThanEqual.dhall
 
 let min
diff --git a/dhall-lang/Prelude/Natural/odd b/dhall-lang/Prelude/Natural/odd
--- a/dhall-lang/Prelude/Natural/odd
+++ b/dhall-lang/Prelude/Natural/odd
@@ -1,2 +1,3 @@
-  ./odd.dhall sha256:ab3c729262c642ec1cdb72a81e910fcfaf2aea13e3961d0bf1bec83efea5aac5
+  ./odd.dhall
+    sha256:ab3c729262c642ec1cdb72a81e910fcfaf2aea13e3961d0bf1bec83efea5aac5
 ? ./odd.dhall
diff --git a/dhall-lang/Prelude/Natural/package.dhall b/dhall-lang/Prelude/Natural/package.dhall
--- a/dhall-lang/Prelude/Natural/package.dhall
+++ b/dhall-lang/Prelude/Natural/package.dhall
@@ -1,67 +1,89 @@
 { build =
-      ./build.dhall sha256:e7e25e6c4f1d8e573606ed1bef725396ac2de5c68f7c5d329ffc5822085b984c
+      ./build.dhall
+        sha256:e7e25e6c4f1d8e573606ed1bef725396ac2de5c68f7c5d329ffc5822085b984c
     ? ./build.dhall
 , enumerate =
-      ./enumerate.dhall sha256:0cf083980a752b21ce0df9fc2222a4c139f50909e2353576e26a191002aa1ce3
+      ./enumerate.dhall
+        sha256:0cf083980a752b21ce0df9fc2222a4c139f50909e2353576e26a191002aa1ce3
     ? ./enumerate.dhall
 , even =
-      ./even.dhall sha256:b85b8b56892dfef881e1c0e79eade0b949528f792aac0ea42432b315ede4ee66
+      ./even.dhall
+        sha256:b85b8b56892dfef881e1c0e79eade0b949528f792aac0ea42432b315ede4ee66
     ? ./even.dhall
 , fold =
-      ./fold.dhall sha256:fd01c931e585a8f5fd049af7b076b862ea164f1813b34800c7616a49e549ee06
+      ./fold.dhall
+        sha256:fd01c931e585a8f5fd049af7b076b862ea164f1813b34800c7616a49e549ee06
     ? ./fold.dhall
 , isZero =
-      ./isZero.dhall sha256:1be98236800ed2d5cff44f16ca02b34b0c37dfa239d9e0d63d9d2c6eeae3d1d1
+      ./isZero.dhall
+        sha256:1be98236800ed2d5cff44f16ca02b34b0c37dfa239d9e0d63d9d2c6eeae3d1d1
     ? ./isZero.dhall
 , odd =
-      ./odd.dhall sha256:ab3c729262c642ec1cdb72a81e910fcfaf2aea13e3961d0bf1bec83efea5aac5
+      ./odd.dhall
+        sha256:ab3c729262c642ec1cdb72a81e910fcfaf2aea13e3961d0bf1bec83efea5aac5
     ? ./odd.dhall
 , product =
-      ./product.dhall sha256:e3e6fd76207875b81d39f79fdbc90b5e640444c04fb3d84c2c9326748f0b26e6
+      ./product.dhall
+        sha256:e3e6fd76207875b81d39f79fdbc90b5e640444c04fb3d84c2c9326748f0b26e6
     ? ./product.dhall
 , sum =
-      ./sum.dhall sha256:33f7f4c3aff62e5ecf4848f964363133452d420dcde045784518fb59fa970037
+      ./sum.dhall
+        sha256:33f7f4c3aff62e5ecf4848f964363133452d420dcde045784518fb59fa970037
     ? ./sum.dhall
 , show =
-      ./show.dhall sha256:684ed560ad86f438efdea229eca122c29e8e14f397ed32ec97148d578ca5aa21
+      ./show.dhall
+        sha256:684ed560ad86f438efdea229eca122c29e8e14f397ed32ec97148d578ca5aa21
     ? ./show.dhall
 , toDouble =
-      ./toDouble.dhall sha256:d5eb52143dcd35b46a6f0cdb2d3cbf31a14b6daeba56e29066f8e344c9fb6e81
+      ./toDouble.dhall
+        sha256:d5eb52143dcd35b46a6f0cdb2d3cbf31a14b6daeba56e29066f8e344c9fb6e81
     ? ./toDouble.dhall
 , toInteger =
-      ./toInteger.dhall sha256:160d2d278619f3da34a1f4f02e739a447e4f2aa5a2978c45b710515b41491e1f
+      ./toInteger.dhall
+        sha256:160d2d278619f3da34a1f4f02e739a447e4f2aa5a2978c45b710515b41491e1f
     ? ./toInteger.dhall
 , lessThan =
-      ./lessThan.dhall sha256:3381b66749290769badf8855d8a3f4af62e8de52d1364d838a9d1e20c94fa70c
+      ./lessThan.dhall
+        sha256:3381b66749290769badf8855d8a3f4af62e8de52d1364d838a9d1e20c94fa70c
     ? ./lessThan.dhall
 , lessThanEqual =
-      ./lessThanEqual.dhall sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99
+      ./lessThanEqual.dhall
+        sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99
     ? ./lessThanEqual.dhall
 , equal =
-      ./equal.dhall sha256:7f108edfa35ddc7cebafb24dc073478e93a802e13b5bc3fd22f4768c9b066e60
+      ./equal.dhall
+        sha256:7f108edfa35ddc7cebafb24dc073478e93a802e13b5bc3fd22f4768c9b066e60
     ? ./equal.dhall
 , greaterThanEqual =
-      ./greaterThanEqual.dhall sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4
+      ./greaterThanEqual.dhall
+        sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4
     ? ./greaterThanEqual.dhall
 , greaterThan =
-      ./greaterThan.dhall sha256:f702abcdfcd7ad73619b9285d7e41c3a1d017fb6b8d037cf40bd93bf30c09b2c
+      ./greaterThan.dhall
+        sha256:f702abcdfcd7ad73619b9285d7e41c3a1d017fb6b8d037cf40bd93bf30c09b2c
     ? ./greaterThan.dhall
 , min =
-      ./min.dhall sha256:f25f9c462e4dbf0eb15f9ff6ac840c6e9c82255a7f4f2ab408bdab338e028710
+      ./min.dhall
+        sha256:f25f9c462e4dbf0eb15f9ff6ac840c6e9c82255a7f4f2ab408bdab338e028710
     ? ./min.dhall
 , max =
-      ./max.dhall sha256:1f3b18da330223ab039fad11693da72c7e68d516f50502c73f41a89a097b62f7
+      ./max.dhall
+        sha256:1f3b18da330223ab039fad11693da72c7e68d516f50502c73f41a89a097b62f7
     ? ./max.dhall
 , listMin =
-      ./listMin.dhall sha256:ee70b0d010bbca6012162e8ae1f6e9d9bd10a152675509b0f23145b98b5d43c6
+      ./listMin.dhall
+        sha256:ee70b0d010bbca6012162e8ae1f6e9d9bd10a152675509b0f23145b98b5d43c6
     ? ./listMin.dhall
 , listMax =
-      ./listMax.dhall sha256:20906ffcc9970f740106d4516cb7868b43d75ff8c9f00ff8a9680ae68c48a472
+      ./listMax.dhall
+        sha256:20906ffcc9970f740106d4516cb7868b43d75ff8c9f00ff8a9680ae68c48a472
     ? ./listMax.dhall
 , sort =
-      ./sort.dhall sha256:36ce8b3e5538454763987ca904d8d7c5ba34c2147434a19eddd51f684432b260
+      ./sort.dhall
+        sha256:36ce8b3e5538454763987ca904d8d7c5ba34c2147434a19eddd51f684432b260
     ? ./sort.dhall
 , subtract =
-      ./subtract.dhall sha256:b9277ac637d09142a3a3ac79137ef5955c42f8b33b6746d59db2c9d75ccdd745
+      ./subtract.dhall
+        sha256:b9277ac637d09142a3a3ac79137ef5955c42f8b33b6746d59db2c9d75ccdd745
     ? ./subtract.dhall
 }
diff --git a/dhall-lang/Prelude/Natural/product b/dhall-lang/Prelude/Natural/product
--- a/dhall-lang/Prelude/Natural/product
+++ b/dhall-lang/Prelude/Natural/product
@@ -1,2 +1,3 @@
-  ./product.dhall sha256:e3e6fd76207875b81d39f79fdbc90b5e640444c04fb3d84c2c9326748f0b26e6
+  ./product.dhall
+    sha256:e3e6fd76207875b81d39f79fdbc90b5e640444c04fb3d84c2c9326748f0b26e6
 ? ./product.dhall
diff --git a/dhall-lang/Prelude/Natural/show b/dhall-lang/Prelude/Natural/show
--- a/dhall-lang/Prelude/Natural/show
+++ b/dhall-lang/Prelude/Natural/show
@@ -1,2 +1,3 @@
-  ./show.dhall sha256:684ed560ad86f438efdea229eca122c29e8e14f397ed32ec97148d578ca5aa21
+  ./show.dhall
+    sha256:684ed560ad86f438efdea229eca122c29e8e14f397ed32ec97148d578ca5aa21
 ? ./show.dhall
diff --git a/dhall-lang/Prelude/Natural/sort b/dhall-lang/Prelude/Natural/sort
--- a/dhall-lang/Prelude/Natural/sort
+++ b/dhall-lang/Prelude/Natural/sort
@@ -1,2 +1,3 @@
-  ./sort.dhall sha256:36ce8b3e5538454763987ca904d8d7c5ba34c2147434a19eddd51f684432b260
+  ./sort.dhall
+    sha256:36ce8b3e5538454763987ca904d8d7c5ba34c2147434a19eddd51f684432b260
 ? ./sort.dhall
diff --git a/dhall-lang/Prelude/Natural/sort.dhall b/dhall-lang/Prelude/Natural/sort.dhall
--- a/dhall-lang/Prelude/Natural/sort.dhall
+++ b/dhall-lang/Prelude/Natural/sort.dhall
@@ -1,14 +1,17 @@
 --| `sort` sorts a `List` of `Natural`s in ascending order
 let greaterThanEqual =
-        ./greaterThanEqual.dhall sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4
+        ./greaterThanEqual.dhall
+          sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4
       ? ./greaterThanEqual.dhall
 
 let listMin =
-        ./listMin.dhall sha256:ee70b0d010bbca6012162e8ae1f6e9d9bd10a152675509b0f23145b98b5d43c6
+        ./listMin.dhall
+          sha256:ee70b0d010bbca6012162e8ae1f6e9d9bd10a152675509b0f23145b98b5d43c6
       ? ./listMin.dhall
 
 let List/partition =
-        ../List/partition.dhall sha256:38147ac6d750a6492736dd90cc967bf09aa405c499de943c64fab7b86ae02f03
+        ../List/partition.dhall
+          sha256:38147ac6d750a6492736dd90cc967bf09aa405c499de943c64fab7b86ae02f03
       ? ../List/partition.dhall
 
 let Accumulator = { sorted : List Natural, rest : List Natural }
diff --git a/dhall-lang/Prelude/Natural/subtract b/dhall-lang/Prelude/Natural/subtract
--- a/dhall-lang/Prelude/Natural/subtract
+++ b/dhall-lang/Prelude/Natural/subtract
@@ -1,2 +1,3 @@
-  ./subtract.dhall sha256:b9277ac637d09142a3a3ac79137ef5955c42f8b33b6746d59db2c9d75ccdd745
+  ./subtract.dhall
+    sha256:b9277ac637d09142a3a3ac79137ef5955c42f8b33b6746d59db2c9d75ccdd745
 ? ./subtract.dhall
diff --git a/dhall-lang/Prelude/Natural/sum b/dhall-lang/Prelude/Natural/sum
--- a/dhall-lang/Prelude/Natural/sum
+++ b/dhall-lang/Prelude/Natural/sum
@@ -1,2 +1,3 @@
-  ./sum.dhall sha256:33f7f4c3aff62e5ecf4848f964363133452d420dcde045784518fb59fa970037
+  ./sum.dhall
+    sha256:33f7f4c3aff62e5ecf4848f964363133452d420dcde045784518fb59fa970037
 ? ./sum.dhall
diff --git a/dhall-lang/Prelude/Natural/toDouble b/dhall-lang/Prelude/Natural/toDouble
--- a/dhall-lang/Prelude/Natural/toDouble
+++ b/dhall-lang/Prelude/Natural/toDouble
@@ -1,2 +1,3 @@
-  ./toDouble.dhall sha256:d5eb52143dcd35b46a6f0cdb2d3cbf31a14b6daeba56e29066f8e344c9fb6e81
+  ./toDouble.dhall
+    sha256:d5eb52143dcd35b46a6f0cdb2d3cbf31a14b6daeba56e29066f8e344c9fb6e81
 ? ./toDouble.dhall
diff --git a/dhall-lang/Prelude/Natural/toInteger b/dhall-lang/Prelude/Natural/toInteger
--- a/dhall-lang/Prelude/Natural/toInteger
+++ b/dhall-lang/Prelude/Natural/toInteger
@@ -1,2 +1,3 @@
-  ./toInteger.dhall sha256:160d2d278619f3da34a1f4f02e739a447e4f2aa5a2978c45b710515b41491e1f
+  ./toInteger.dhall
+    sha256:160d2d278619f3da34a1f4f02e739a447e4f2aa5a2978c45b710515b41491e1f
 ? ./toInteger.dhall
diff --git a/dhall-lang/Prelude/NonEmpty/Type.dhall b/dhall-lang/Prelude/NonEmpty/Type.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/Type.dhall
@@ -0,0 +1,9 @@
+{-|
+A `NonEmpty` list has at least one element and supports many of the same
+operations as `List`s
+-}
+let NonEmpty
+    : Type → Type
+    = λ(a : Type) → { head : a, tail : List a }
+
+in  NonEmpty
diff --git a/dhall-lang/Prelude/NonEmpty/all.dhall b/dhall-lang/Prelude/NonEmpty/all.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/all.dhall
@@ -0,0 +1,34 @@
+{-|
+Returns `True` if the supplied function returns `True` for all elements in the
+`NonEmpty` list
+-}
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let NonEmpty/toList =
+        ./toList.dhall
+          sha256:0977fe14b77232a4451dcf409c43df4589c4b3cdde7b613aab8df183be1b53f5
+      ? ./toList.dhall
+
+let all
+    : ∀(a : Type) → (a → Bool) → NonEmpty a → Bool
+    = λ(a : Type) →
+      λ(f : a → Bool) →
+      λ(xs : NonEmpty a) →
+        List/fold
+          a
+          (NonEmpty/toList a xs)
+          Bool
+          (λ(x : a) → λ(r : Bool) → f x && r)
+          True
+
+let example0 =
+      assert : all Natural Natural/even { head = 2, tail = [ 3, 5 ] } ≡ False
+
+let example1 =
+        assert
+      : all Natural Natural/even { head = 2, tail = [] : List Natural } ≡ True
+
+in  all
diff --git a/dhall-lang/Prelude/NonEmpty/any.dhall b/dhall-lang/Prelude/NonEmpty/any.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/any.dhall
@@ -0,0 +1,34 @@
+{-|
+Returns `True` if the supplied function returns `True` for any element in the
+`NonEmpty` list
+-}
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let NonEmpty/toList =
+        ./toList.dhall
+          sha256:0977fe14b77232a4451dcf409c43df4589c4b3cdde7b613aab8df183be1b53f5
+      ? ./toList.dhall
+
+let any
+    : ∀(a : Type) → (a → Bool) → NonEmpty a → Bool
+    = λ(a : Type) →
+      λ(f : a → Bool) →
+      λ(xs : NonEmpty a) →
+        List/fold
+          a
+          (NonEmpty/toList a xs)
+          Bool
+          (λ(x : a) → λ(r : Bool) → f x || r)
+          False
+
+let example0 =
+      assert : any Natural Natural/even { head = 2, tail = [ 3, 5 ] } ≡ True
+
+let example1 =
+        assert
+      : any Natural Natural/even { head = 3, tail = [] : List Natural } ≡ False
+
+in  any
diff --git a/dhall-lang/Prelude/NonEmpty/concat.dhall b/dhall-lang/Prelude/NonEmpty/concat.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/concat.dhall
@@ -0,0 +1,61 @@
+{-|
+Concatenate a `NonEmpty` list of `NonEmpty` lists into a single `NonEmpty`
+list
+-}
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let NonEmpty/toList =
+        ./toList.dhall
+          sha256:0977fe14b77232a4451dcf409c43df4589c4b3cdde7b613aab8df183be1b53f5
+      ? ./toList.dhall
+
+let List/concatMap =
+        ../List/concatMap.dhall
+          sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64
+      ? ../List/concatMap.dhall
+
+let concat
+    : ∀(a : Type) → NonEmpty (NonEmpty a) → NonEmpty a
+    = λ(a : Type) →
+      λ(xss : NonEmpty (NonEmpty a)) →
+        { head = xss.head.head
+        , tail =
+              xss.head.tail
+            # List/concatMap (NonEmpty a) a (NonEmpty/toList a) xss.tail
+        }
+
+let example0 =
+        assert
+      :   concat
+            Natural
+            { head = { head = 0, tail = [ 1, 2 ] }
+            , tail =
+              [ { head = 3, tail = [ 4 ] }, { head = 5, tail = [ 6, 7, 8 ] } ]
+            }
+        ≡ { head = 0, tail = [ 1, 2, 3, 4, 5, 6, 7, 8 ] }
+
+let example1 =
+        assert
+      :   concat
+            Natural
+            { head = { head = 0, tail = [] : List Natural }
+            , tail =
+              [ { head = 1, tail = [] : List Natural }
+              , { head = 2, tail = [] : List Natural }
+              ]
+            }
+        ≡ { head = 0, tail = [ 1, 2 ] : List Natural }
+
+let example2 =
+        assert
+      :   concat
+            Natural
+            { head = { head = 0, tail = [] : List Natural }
+            , tail = [] : List (NonEmpty Natural)
+            }
+        ≡ { head = 0, tail = [] : List Natural }
+
+in  concat
diff --git a/dhall-lang/Prelude/NonEmpty/concatMap.dhall b/dhall-lang/Prelude/NonEmpty/concatMap.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/concatMap.dhall
@@ -0,0 +1,56 @@
+{-|
+Transform a `NonEmpty` list by applying a function to each element and
+flattening the results
+-}
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let NonEmpty/toList =
+        ./toList.dhall
+          sha256:0977fe14b77232a4451dcf409c43df4589c4b3cdde7b613aab8df183be1b53f5
+      ? ./toList.dhall
+
+let List/concatMap =
+        ../List/concatMap.dhall
+          sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64
+      ? ../List/concatMap.dhall
+
+let concatMap
+    : ∀(a : Type) → ∀(b : Type) → (a → NonEmpty b) → NonEmpty a → NonEmpty b
+    = λ(a : Type) →
+      λ(b : Type) →
+      λ(f : a → NonEmpty b) →
+      λ(xs : NonEmpty a) →
+        let ys = f xs.head
+
+        in  { head = ys.head
+            , tail =
+                  ys.tail
+                # List/concatMap
+                    a
+                    b
+                    (λ(x : a) → NonEmpty/toList b (f x))
+                    xs.tail
+            }
+
+let example0 =
+        assert
+      :   concatMap
+            Natural
+            Natural
+            (λ(n : Natural) → { head = n, tail = [ n ] })
+            { head = 2, tail = [ 3, 5 ] }
+        ≡ { head = 2, tail = [ 2, 3, 3, 5, 5 ] }
+
+let example1 =
+        assert
+      :   concatMap
+            Natural
+            Natural
+            (λ(n : Natural) → { head = n, tail = [ n ] })
+            { head = 2, tail = [] : List Natural }
+        ≡ { head = 2, tail = [ 2 ] }
+
+in  concatMap
diff --git a/dhall-lang/Prelude/NonEmpty/head.dhall b/dhall-lang/Prelude/NonEmpty/head.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/head.dhall
@@ -0,0 +1,13 @@
+--| Retrieve the first element of the `NonEmpty` list
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let head
+    : ∀(a : Type) → NonEmpty a → a
+    = λ(a : Type) → λ(xs : NonEmpty a) → xs.head
+
+let example = assert : head Natural { head = 0, tail = [ 1, 2 ] } ≡ 0
+
+in  head
diff --git a/dhall-lang/Prelude/NonEmpty/index.dhall b/dhall-lang/Prelude/NonEmpty/index.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/index.dhall
@@ -0,0 +1,33 @@
+--| Retrieve an element from a `NonEmpty` list using its 0-based index
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let List/index =
+        ../List/index.dhall
+          sha256:e657b55ecae4d899465c3032cb1a64c6aa6dc2aa3034204f3c15ce5c96c03e63
+      ? ../List/index.dhall
+
+let index
+    : Natural → ∀(a : Type) → NonEmpty a → Optional a
+    = λ(n : Natural) →
+      λ(a : Type) →
+      λ(xs : NonEmpty a) →
+        if    Natural/isZero n
+        then  Some xs.head
+        else  List/index (Natural/subtract 1 n) a xs.tail
+
+let property =
+      λ(n : Natural) →
+      λ(a : Type) →
+      λ(xs : NonEmpty a) →
+        assert : index 0 a xs ≡ Some xs.head
+
+let example0 = assert : index 1 Natural { head = 2, tail = [ 3, 5 ] } ≡ Some 3
+
+let example1 =
+        assert
+      : index 1 Natural { head = 2, tail = [] : List Natural } ≡ None Natural
+
+in  index
diff --git a/dhall-lang/Prelude/NonEmpty/indexed.dhall b/dhall-lang/Prelude/NonEmpty/indexed.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/indexed.dhall
@@ -0,0 +1,41 @@
+--| Tag each element of the `NonEmpty` list with its index
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let List/map =
+        ../List/map.dhall
+          sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
+      ? ../List/map.dhall
+
+let indexed
+    : ∀(a : Type) → NonEmpty a → NonEmpty { index : Natural, value : a }
+    = λ(a : Type) →
+      λ(xs : NonEmpty a) →
+        { head = { index = 0, value = xs.head }
+        , tail =
+            List/map
+              { index : Natural, value : a }
+              { index : Natural, value : a }
+              ( λ(ix : { index : Natural, value : a }) →
+                  { index = ix.index + 1, value = ix.value }
+              )
+              (List/indexed a xs.tail)
+        }
+
+let example0 =
+        assert
+      :   indexed Bool { head = True, tail = [ False, True ] }
+        ≡ { head = { index = 0, value = True }
+          , tail = [ { index = 1, value = False }, { index = 2, value = True } ]
+          }
+
+let example1 =
+        assert
+      :   indexed Bool { head = True, tail = [] : List Bool }
+        ≡ { head = { index = 0, value = True }
+          , tail = [] : List { index : Natural, value : Bool }
+          }
+
+in  indexed
diff --git a/dhall-lang/Prelude/NonEmpty/last.dhall b/dhall-lang/Prelude/NonEmpty/last.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/last.dhall
@@ -0,0 +1,17 @@
+--| Retrieve the last element of the `NonEmpty` list
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let last
+    : ∀(a : Type) → NonEmpty a → a
+    = λ(a : Type) →
+      λ(xs : NonEmpty a) →
+        merge { Some = λ(x : a) → x, None = xs.head } (List/last a xs.tail)
+
+let example0 = assert : last Natural { head = 0, tail = [ 1, 2 ] } ≡ 2
+
+let example1 = assert : last Natural { head = 0, tail = [] : List Natural } ≡ 0
+
+in  last
diff --git a/dhall-lang/Prelude/NonEmpty/length.dhall b/dhall-lang/Prelude/NonEmpty/length.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/length.dhall
@@ -0,0 +1,16 @@
+--| Returns the number of elements in a `NonEmpty` list
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let length
+    : ∀(a : Type) → NonEmpty a → Natural
+    = λ(a : Type) → λ(xs : NonEmpty a) → List/length a xs.tail + 1
+
+let example0 = assert : length Natural { head = 0, tail = [ 1, 2 ] } ≡ 3
+
+let example1 =
+      assert : length Natural { head = 0, tail = [] : List Natural } ≡ 1
+
+in  length
diff --git a/dhall-lang/Prelude/NonEmpty/make.dhall b/dhall-lang/Prelude/NonEmpty/make.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/make.dhall
@@ -0,0 +1,18 @@
+{-|
+Create a `NonEmpty` list using a function instead of a record
+
+This might come in handy if you want to decouple the `NonEmpty` list
+construction from the specific names of the fields.
+-}
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let make
+    : ∀(a : Type) → ∀(head : a) → ∀(tail : List a) → NonEmpty a
+    = λ(a : Type) → λ(head : a) → λ(tail : List a) → { head, tail }
+
+let example = assert : make Natural 1 [ 2, 3 ] ≡ { head = 1, tail = [ 2, 3 ] }
+
+in  make
diff --git a/dhall-lang/Prelude/NonEmpty/map.dhall b/dhall-lang/Prelude/NonEmpty/map.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/map.dhall
@@ -0,0 +1,30 @@
+--| Transform a `NonEmpty` list by applying a function to each element
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let List/map =
+        ../List/map.dhall
+          sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
+      ? ../List/map.dhall
+
+let map
+    : ∀(a : Type) → ∀(b : Type) → (a → b) → NonEmpty a → NonEmpty b
+    = λ(a : Type) →
+      λ(b : Type) →
+      λ(f : a → b) →
+      λ(xs : NonEmpty a) →
+        { head = f xs.head, tail = List/map a b f xs.tail }
+
+let example0 =
+        assert
+      :   map Natural Bool Natural/even { head = 2, tail = [ 3, 5 ] }
+        ≡ { head = True, tail = [ False, False ] }
+
+let example1 =
+        assert
+      :   map Natural Bool Natural/even { head = 2, tail = [] : List Natural }
+        ≡ { head = True, tail = [] : List Bool }
+
+in  map
diff --git a/dhall-lang/Prelude/NonEmpty/package.dhall b/dhall-lang/Prelude/NonEmpty/package.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/package.dhall
@@ -0,0 +1,73 @@
+{ Type =
+      ./Type.dhall
+        sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+    ? ./Type.dhall
+, all =
+      ./all.dhall
+        sha256:f2f9389d94f4deb5b918b2e50c1093b57e00b37ddd3ab2b43959993b1cb519b6
+    ? ./all.dhall
+, any =
+      ./any.dhall
+        sha256:7662b665840e41b12a28190eec3aaab9201fcb90c00a8ec3666d549e1020992f
+    ? ./any.dhall
+, concat =
+      ./concat.dhall
+        sha256:6d55181938c06c6b806877028f6a241912e9c0935d9a10dd958775bf21e0f64d
+    ? ./concat.dhall
+, concatMap =
+      ./concatMap.dhall
+        sha256:fc33fa9449dc8f74dd8c8be379b7b7c4b0433e2b65650370d81d9a7111a590e2
+    ? ./concatMap.dhall
+, head =
+      ./head.dhall
+        sha256:6b9551c97b89fe666d2e03392a4af5e87abfdbdb0aa0e29fc4b3aa1b318474e7
+    ? ./head.dhall
+, index =
+      ./index.dhall
+        sha256:0ba2fcc9227fab10676cd61b47a18d779818a19c16727c7cc4b4c78e114fd663
+    ? ./index.dhall
+, indexed =
+      ./indexed.dhall
+        sha256:9dae2c1fecd142df837e98769b5bbdd0bfe25c35a93af1064b4e62f9c780ae6b
+    ? ./indexed.dhall
+, last =
+      ./last.dhall
+        sha256:f83115492b6e408d0b662a68440620f7f3df07b56e7ed66dab77a6e65b121250
+    ? ./last.dhall
+, length =
+      ./length.dhall
+        sha256:eef3b857a164487cfdb960e3298c4731970b7a430011289cba35a9ad722ac989
+    ? ./length.dhall
+, make =
+      ./make.dhall
+        sha256:549de393673c4773c80a50ea578ea50d7f2c4c2eda31956e73fabc4e486f3b1e
+    ? ./make.dhall
+, map =
+      ./map.dhall
+        sha256:93d53afe874bb2eed946c21ca5ada3c9716b7d00e6d8edfaba6484cd9c5a00bd
+    ? ./map.dhall
+, reverse =
+      ./reverse.dhall
+        sha256:a6d810cdd3badffd4e7ca82091609a855cffac900c82d7ff3724463fbc2d5ff2
+    ? ./reverse.dhall
+, shifted =
+      ./shifted.dhall
+        sha256:36156973d6916aed10cfd8c59be7c019516bf0a2c47b499a17a8ef0611e1c189
+    ? ./shifted.dhall
+, singleton =
+      ./singleton.dhall
+        sha256:c9197aabe97695f7ca66f7419bf172d806b2c915594a8fc0d2ff6495db496ff2
+    ? ./singleton.dhall
+, toList =
+      ./toList.dhall
+        sha256:0977fe14b77232a4451dcf409c43df4589c4b3cdde7b613aab8df183be1b53f5
+    ? ./toList.dhall
+, unzip =
+      ./unzip.dhall
+        sha256:d0b925bea32a29aad5cb48a84e8ef8cff750308afe1dd20b24eca19e4e999abc
+    ? ./unzip.dhall
+, zip =
+      ./zip.dhall
+        sha256:073f8b4808b6d1db84964f772f6291e6ea193602163438db43fa282c560c01e4
+    ? ./zip.dhall
+}
diff --git a/dhall-lang/Prelude/NonEmpty/reverse.dhall b/dhall-lang/Prelude/NonEmpty/reverse.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/reverse.dhall
@@ -0,0 +1,35 @@
+--| Reverse a `NonEmpty` list
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let List/drop =
+        ../List/drop.dhall
+          sha256:af983ba3ead494dd72beed05c0f3a17c36a4244adedf7ced502c6512196ed0cf
+      ? ../List/drop.dhall
+
+let reverse
+    : ∀(a : Type) → NonEmpty a → NonEmpty a
+    = λ(a : Type) →
+      λ(xs : NonEmpty a) →
+        let ys = List/reverse a xs.tail
+
+        in  merge
+              { Some =
+                  λ(y : a) → { head = y, tail = List/drop 1 a ys # [ xs.head ] }
+              , None = { head = xs.head, tail = [] : List a }
+              }
+              (List/head a ys)
+
+let example =
+        assert
+      :   reverse Natural { head = 0, tail = [ 1, 2 ] }
+        ≡ { head = 2, tail = [ 1, 0 ] }
+
+let example1 =
+        assert
+      :   reverse Natural { head = 0, tail = [] : List Natural }
+        ≡ { head = 0, tail = [] : List Natural }
+
+in  reverse
diff --git a/dhall-lang/Prelude/NonEmpty/shifted.dhall b/dhall-lang/Prelude/NonEmpty/shifted.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/shifted.dhall
@@ -0,0 +1,101 @@
+{-|
+Combine a `NonEmpty` list of `NonEmpty` lists, offsetting the `index` of each
+element by the number of elements in preceding lists
+-}
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let NonEmpty/toList =
+        ./toList.dhall
+          sha256:0977fe14b77232a4451dcf409c43df4589c4b3cdde7b613aab8df183be1b53f5
+      ? ./toList.dhall
+
+let List/map =
+        ../List/map.dhall
+          sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
+      ? ../List/map.dhall
+
+let List/shifted =
+        ../List/shifted.dhall
+          sha256:54fb22c7e952ebce1cfc0fcdd33ce4cfa817bff9d6564af268dea6685f8b5dfe
+      ? ../List/shifted.dhall
+
+let shifted
+    : ∀(a : Type) →
+      NonEmpty (NonEmpty { index : Natural, value : a }) →
+        NonEmpty { index : Natural, value : a }
+    = λ(a : Type) →
+      λ(kvss : NonEmpty (NonEmpty { index : Natural, value : a })) →
+        { head = kvss.head.head
+        , tail =
+            List/shifted
+              a
+              (   [ kvss.head.tail ]
+                # List/map
+                    (NonEmpty { index : Natural, value : a })
+                    (List { index : Natural, value : a })
+                    ( λ(kvs : NonEmpty { index : Natural, value : a }) →
+                        List/map
+                          { index : Natural, value : a }
+                          { index : Natural, value : a }
+                          ( λ(kv : { index : Natural, value : a }) →
+                              { index = kv.index + 1, value = kv.value }
+                          )
+                          (NonEmpty/toList { index : Natural, value : a } kvs)
+                    )
+                    kvss.tail
+              )
+        }
+
+let example0 =
+        assert
+      :   shifted
+            Bool
+            { head =
+              { head = { index = 0, value = True }
+              , tail =
+                [ { index = 1, value = True }, { index = 2, value = True } ]
+              }
+            , tail =
+              [ { head = { index = 0, value = False }
+                , tail = [ { index = 1, value = False } ]
+                }
+              , { head = { index = 0, value = True }
+                , tail =
+                  [ { index = 1, value = True }
+                  , { index = 2, value = True }
+                  , { index = 3, value = True }
+                  ]
+                }
+              ]
+            }
+        ≡ { head = { index = 0, value = True }
+          , tail =
+            [ { index = 1, value = True }
+            , { index = 2, value = True }
+            , { index = 3, value = False }
+            , { index = 4, value = False }
+            , { index = 5, value = True }
+            , { index = 6, value = True }
+            , { index = 7, value = True }
+            , { index = 8, value = True }
+            ]
+          }
+
+let example1 =
+        assert
+      :   shifted
+            Bool
+            { head =
+              { head = { index = 0, value = True }
+              , tail = [] : List { index : Natural, value : Bool }
+              }
+            , tail = [] : List (NonEmpty { index : Natural, value : Bool })
+            }
+        ≡ { head = { index = 0, value = True }
+          , tail = [] : List { index : Natural, value : Bool }
+          }
+
+in  shifted
diff --git a/dhall-lang/Prelude/NonEmpty/singleton.dhall b/dhall-lang/Prelude/NonEmpty/singleton.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/singleton.dhall
@@ -0,0 +1,14 @@
+--| Create a `NonEmpty` list with just one element
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let singleton
+    : ∀(a : Type) → a → NonEmpty a
+    = λ(a : Type) → λ(x : a) → { head = x, tail = [] : List a }
+
+let example =
+      assert : singleton Natural 2 ≡ { head = 2, tail = [] : List Natural }
+
+in  singleton
diff --git a/dhall-lang/Prelude/NonEmpty/toList.dhall b/dhall-lang/Prelude/NonEmpty/toList.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/toList.dhall
@@ -0,0 +1,17 @@
+--| Convert a `NonEmpty` list into the equivalent `List`
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let toList
+    : ∀(a : Type) → NonEmpty a → List a
+    = λ(a : Type) → λ(xs : NonEmpty a) → [ xs.head ] # xs.tail
+
+let example0 =
+      assert : toList Natural { head = 2, tail = [ 3, 5 ] } ≡ [ 2, 3, 5 ]
+
+let example1 =
+      assert : toList Natural { head = 2, tail = [] : List Natural } ≡ [ 2 ]
+
+in  toList
diff --git a/dhall-lang/Prelude/NonEmpty/unzip.dhall b/dhall-lang/Prelude/NonEmpty/unzip.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/unzip.dhall
@@ -0,0 +1,58 @@
+--| Unzip a `NonEmpty` list into two separate `NonEmpty` lists
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let NonEmpty/map =
+        ./map.dhall
+          sha256:93d53afe874bb2eed946c21ca5ada3c9716b7d00e6d8edfaba6484cd9c5a00bd
+      ? ./map.dhall
+
+let unzip
+    : ∀(a : Type) →
+      ∀(b : Type) →
+      NonEmpty { _1 : a, _2 : b } →
+        { _1 : NonEmpty a, _2 : NonEmpty b }
+    = λ(a : Type) →
+      λ(b : Type) →
+      λ(xs : NonEmpty { _1 : a, _2 : b }) →
+        { _1 =
+            NonEmpty/map
+              { _1 : a, _2 : b }
+              a
+              (λ(x : { _1 : a, _2 : b }) → x._1)
+              xs
+        , _2 =
+            NonEmpty/map
+              { _1 : a, _2 : b }
+              b
+              (λ(x : { _1 : a, _2 : b }) → x._2)
+              xs
+        }
+
+let example0 =
+        assert
+      :   unzip
+            Text
+            Bool
+            { head = { _1 = "ABC", _2 = True }
+            , tail = [ { _1 = "DEF", _2 = False }, { _1 = "GHI", _2 = True } ]
+            }
+        ≡ { _1 = { head = "ABC", tail = [ "DEF", "GHI" ] }
+          , _2 = { head = True, tail = [ False, True ] }
+          }
+
+let example1 =
+        assert
+      :   unzip
+            Text
+            Bool
+            { head = { _1 = "ABC", _2 = True }
+            , tail = [] : List { _1 : Text, _2 : Bool }
+            }
+        ≡ { _1 = { head = "ABC", tail = [] : List Text }
+          , _2 = { head = True, tail = [] : List Bool }
+          }
+
+in  unzip
diff --git a/dhall-lang/Prelude/NonEmpty/zip.dhall b/dhall-lang/Prelude/NonEmpty/zip.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/Prelude/NonEmpty/zip.dhall
@@ -0,0 +1,63 @@
+{-|
+Zip two `NonEmpty` lists into a single `NonEmpty`
+
+The resulting `NonEmpty` will have the length of the shortest of its arguments.
+-}
+let NonEmpty =
+        ./Type.dhall
+          sha256:e2e247455a858317e470e0e4affca8ac07f9f130570ece9cb7ac1f4ea3deb87f
+      ? ./Type.dhall
+
+let List/zip =
+        ../List/zip.dhall
+          sha256:85ed955eabf3998767f4ad2a28e57d40cd4c68a95519d79e9b622f1d26d979da
+      ? ../List/zip.dhall
+
+let zip
+    : ∀(a : Type) →
+      NonEmpty a →
+      ∀(b : Type) →
+      NonEmpty b →
+        NonEmpty { _1 : a, _2 : b }
+    = λ(a : Type) →
+      λ(xs : NonEmpty a) →
+      λ(b : Type) →
+      λ(ys : NonEmpty b) →
+        { head = { _1 = xs.head, _2 = ys.head }
+        , tail = List/zip a xs.tail b ys.tail
+        }
+
+let example0 =
+        assert
+      :   zip
+            Text
+            { head = "ABC", tail = [ "DEF", "GHI" ] }
+            Natural
+            { head = 1, tail = [ 2, 3 ] }
+        ≡ { head = { _1 = "ABC", _2 = 1 }
+          , tail = [ { _1 = "DEF", _2 = 2 }, { _1 = "GHI", _2 = 3 } ]
+          }
+
+let example1 =
+        assert
+      :   zip
+            Text
+            { head = "ABC", tail = [ "DEF" ] }
+            Bool
+            { head = True, tail = [] : List Bool }
+        ≡ { head = { _1 = "ABC", _2 = True }
+          , tail = [] : List { _1 : Text, _2 : Bool }
+          }
+
+let example2 =
+        assert
+      :   zip
+            Text
+            { head = "ABC", tail = [] : List Text }
+            Natural
+            { head = 1, tail = [ 2 ] }
+        ≡ { head = { _1 = "ABC", _2 = 1 }
+          , tail = [] : List { _1 : Text, _2 : Natural }
+          }
+
+in  zip
diff --git a/dhall-lang/Prelude/Optional/all b/dhall-lang/Prelude/Optional/all
--- a/dhall-lang/Prelude/Optional/all
+++ b/dhall-lang/Prelude/Optional/all
@@ -1,2 +1,3 @@
-  ./all.dhall sha256:a303004b6def0a2a05bf5f0a8d54e84dd45d8bef581789186ac04924956a1695
+  ./all.dhall
+    sha256:a303004b6def0a2a05bf5f0a8d54e84dd45d8bef581789186ac04924956a1695
 ? ./all.dhall
diff --git a/dhall-lang/Prelude/Optional/any b/dhall-lang/Prelude/Optional/any
--- a/dhall-lang/Prelude/Optional/any
+++ b/dhall-lang/Prelude/Optional/any
@@ -1,2 +1,3 @@
-  ./any.dhall sha256:96a5cf4f31b3c598b09161dd3082f0a09f4328a4cefda6a7e09894b37b17b435
+  ./any.dhall
+    sha256:96a5cf4f31b3c598b09161dd3082f0a09f4328a4cefda6a7e09894b37b17b435
 ? ./any.dhall
diff --git a/dhall-lang/Prelude/Optional/build b/dhall-lang/Prelude/Optional/build
--- a/dhall-lang/Prelude/Optional/build
+++ b/dhall-lang/Prelude/Optional/build
@@ -1,2 +1,3 @@
-  ./build.dhall sha256:28e61294bf2dd59dc57cf74f719d1568e60b5ba46c28eac586bc937eff4a2af1
+  ./build.dhall
+    sha256:28e61294bf2dd59dc57cf74f719d1568e60b5ba46c28eac586bc937eff4a2af1
 ? ./build.dhall
diff --git a/dhall-lang/Prelude/Optional/concat b/dhall-lang/Prelude/Optional/concat
--- a/dhall-lang/Prelude/Optional/concat
+++ b/dhall-lang/Prelude/Optional/concat
@@ -1,2 +1,3 @@
-  ./concat.dhall sha256:b7736bd3ebeab14c3912dfb534d0c970a025b001d06c2d5461d4b0e289e3cb7a
+  ./concat.dhall
+    sha256:b7736bd3ebeab14c3912dfb534d0c970a025b001d06c2d5461d4b0e289e3cb7a
 ? ./concat.dhall
diff --git a/dhall-lang/Prelude/Optional/default b/dhall-lang/Prelude/Optional/default
--- a/dhall-lang/Prelude/Optional/default
+++ b/dhall-lang/Prelude/Optional/default
@@ -1,2 +1,3 @@
-  ./default.dhall sha256:5bd665b0d6605c374b3c4a7e2e2bd3b9c1e39323d41441149ed5e30d86e889ad
+  ./default.dhall
+    sha256:5bd665b0d6605c374b3c4a7e2e2bd3b9c1e39323d41441149ed5e30d86e889ad
 ? ./default.dhall
diff --git a/dhall-lang/Prelude/Optional/filter b/dhall-lang/Prelude/Optional/filter
--- a/dhall-lang/Prelude/Optional/filter
+++ b/dhall-lang/Prelude/Optional/filter
@@ -1,2 +1,3 @@
-  ./filter.dhall sha256:54f0a487d578801819613fe000050c038c632edf1f9ccc57677e98ae0ef56b83
+  ./filter.dhall
+    sha256:54f0a487d578801819613fe000050c038c632edf1f9ccc57677e98ae0ef56b83
 ? ./filter.dhall
diff --git a/dhall-lang/Prelude/Optional/fold b/dhall-lang/Prelude/Optional/fold
--- a/dhall-lang/Prelude/Optional/fold
+++ b/dhall-lang/Prelude/Optional/fold
@@ -1,2 +1,3 @@
-  ./fold.dhall sha256:c5b9d72f6f62bdaa0e196ac1c742cc175cd67a717b880fb8aec1333a5a4132cf
+  ./fold.dhall
+    sha256:c5b9d72f6f62bdaa0e196ac1c742cc175cd67a717b880fb8aec1333a5a4132cf
 ? ./fold.dhall
diff --git a/dhall-lang/Prelude/Optional/head b/dhall-lang/Prelude/Optional/head
--- a/dhall-lang/Prelude/Optional/head
+++ b/dhall-lang/Prelude/Optional/head
@@ -1,2 +1,3 @@
-  ./head.dhall sha256:4f256c9338b60a1933f41f2a8fafd861930a1e41770a644cdbac0622676fa34c
+  ./head.dhall
+    sha256:4f256c9338b60a1933f41f2a8fafd861930a1e41770a644cdbac0622676fa34c
 ? ./head.dhall
diff --git a/dhall-lang/Prelude/Optional/last b/dhall-lang/Prelude/Optional/last
--- a/dhall-lang/Prelude/Optional/last
+++ b/dhall-lang/Prelude/Optional/last
@@ -1,2 +1,3 @@
-  ./last.dhall sha256:50400771ae19e9b75efa6581feec318ae1ade0b6a60e215df428c66c4b052707
+  ./last.dhall
+    sha256:50400771ae19e9b75efa6581feec318ae1ade0b6a60e215df428c66c4b052707
 ? ./last.dhall
diff --git a/dhall-lang/Prelude/Optional/length b/dhall-lang/Prelude/Optional/length
--- a/dhall-lang/Prelude/Optional/length
+++ b/dhall-lang/Prelude/Optional/length
@@ -1,2 +1,3 @@
-  ./length.dhall sha256:f168337c5244ded68c05ecf32ce068b6b87158881d07e87b8cb6853fc6982a85
+  ./length.dhall
+    sha256:f168337c5244ded68c05ecf32ce068b6b87158881d07e87b8cb6853fc6982a85
 ? ./length.dhall
diff --git a/dhall-lang/Prelude/Optional/map b/dhall-lang/Prelude/Optional/map
--- a/dhall-lang/Prelude/Optional/map
+++ b/dhall-lang/Prelude/Optional/map
@@ -1,2 +1,3 @@
-  ./map.dhall sha256:501534192d988218d43261c299cc1d1e0b13d25df388937add784778ab0054fa
+  ./map.dhall
+    sha256:501534192d988218d43261c299cc1d1e0b13d25df388937add784778ab0054fa
 ? ./map.dhall
diff --git a/dhall-lang/Prelude/Optional/null b/dhall-lang/Prelude/Optional/null
--- a/dhall-lang/Prelude/Optional/null
+++ b/dhall-lang/Prelude/Optional/null
@@ -1,2 +1,3 @@
-  ./null.dhall sha256:3871180b87ecaba8b53fffb2a8b52d3fce98098fab09a6f759358b9e8042eedc
+  ./null.dhall
+    sha256:3871180b87ecaba8b53fffb2a8b52d3fce98098fab09a6f759358b9e8042eedc
 ? ./null.dhall
diff --git a/dhall-lang/Prelude/Optional/package.dhall b/dhall-lang/Prelude/Optional/package.dhall
--- a/dhall-lang/Prelude/Optional/package.dhall
+++ b/dhall-lang/Prelude/Optional/package.dhall
@@ -1,46 +1,61 @@
 { all =
-      ./all.dhall sha256:a303004b6def0a2a05bf5f0a8d54e84dd45d8bef581789186ac04924956a1695
+      ./all.dhall
+        sha256:a303004b6def0a2a05bf5f0a8d54e84dd45d8bef581789186ac04924956a1695
     ? ./all.dhall
 , any =
-      ./any.dhall sha256:96a5cf4f31b3c598b09161dd3082f0a09f4328a4cefda6a7e09894b37b17b435
+      ./any.dhall
+        sha256:96a5cf4f31b3c598b09161dd3082f0a09f4328a4cefda6a7e09894b37b17b435
     ? ./any.dhall
 , build =
-      ./build.dhall sha256:28e61294bf2dd59dc57cf74f719d1568e60b5ba46c28eac586bc937eff4a2af1
+      ./build.dhall
+        sha256:28e61294bf2dd59dc57cf74f719d1568e60b5ba46c28eac586bc937eff4a2af1
     ? ./build.dhall
 , concat =
-      ./concat.dhall sha256:b7736bd3ebeab14c3912dfb534d0c970a025b001d06c2d5461d4b0e289e3cb7a
+      ./concat.dhall
+        sha256:b7736bd3ebeab14c3912dfb534d0c970a025b001d06c2d5461d4b0e289e3cb7a
     ? ./concat.dhall
 , concatMap =
-      ./concatMap.dhall sha256:c06ae93e900a99299c9b4ec4912ca5395a0103ea88292205b08dd7e345632818
+      ./concatMap.dhall
+        sha256:c06ae93e900a99299c9b4ec4912ca5395a0103ea88292205b08dd7e345632818
     ? ./concatMap.dhall
 , default =
-      ./default.dhall sha256:5bd665b0d6605c374b3c4a7e2e2bd3b9c1e39323d41441149ed5e30d86e889ad
+      ./default.dhall
+        sha256:5bd665b0d6605c374b3c4a7e2e2bd3b9c1e39323d41441149ed5e30d86e889ad
     ? ./default.dhall
 , filter =
-      ./filter.dhall sha256:54f0a487d578801819613fe000050c038c632edf1f9ccc57677e98ae0ef56b83
+      ./filter.dhall
+        sha256:54f0a487d578801819613fe000050c038c632edf1f9ccc57677e98ae0ef56b83
     ? ./filter.dhall
 , fold =
-      ./fold.dhall sha256:c5b9d72f6f62bdaa0e196ac1c742cc175cd67a717b880fb8aec1333a5a4132cf
+      ./fold.dhall
+        sha256:c5b9d72f6f62bdaa0e196ac1c742cc175cd67a717b880fb8aec1333a5a4132cf
     ? ./fold.dhall
 , head =
-      ./head.dhall sha256:4f256c9338b60a1933f41f2a8fafd861930a1e41770a644cdbac0622676fa34c
+      ./head.dhall
+        sha256:4f256c9338b60a1933f41f2a8fafd861930a1e41770a644cdbac0622676fa34c
     ? ./head.dhall
 , last =
-      ./last.dhall sha256:50400771ae19e9b75efa6581feec318ae1ade0b6a60e215df428c66c4b052707
+      ./last.dhall
+        sha256:50400771ae19e9b75efa6581feec318ae1ade0b6a60e215df428c66c4b052707
     ? ./last.dhall
 , length =
-      ./length.dhall sha256:f168337c5244ded68c05ecf32ce068b6b87158881d07e87b8cb6853fc6982a85
+      ./length.dhall
+        sha256:f168337c5244ded68c05ecf32ce068b6b87158881d07e87b8cb6853fc6982a85
     ? ./length.dhall
 , map =
-      ./map.dhall sha256:501534192d988218d43261c299cc1d1e0b13d25df388937add784778ab0054fa
+      ./map.dhall
+        sha256:501534192d988218d43261c299cc1d1e0b13d25df388937add784778ab0054fa
     ? ./map.dhall
 , null =
-      ./null.dhall sha256:3871180b87ecaba8b53fffb2a8b52d3fce98098fab09a6f759358b9e8042eedc
+      ./null.dhall
+        sha256:3871180b87ecaba8b53fffb2a8b52d3fce98098fab09a6f759358b9e8042eedc
     ? ./null.dhall
 , toList =
-      ./toList.dhall sha256:d78f160c619119ef12389e48a629ce293d69f7624c8d016b7a4767ab400344c4
+      ./toList.dhall
+        sha256:d78f160c619119ef12389e48a629ce293d69f7624c8d016b7a4767ab400344c4
     ? ./toList.dhall
 , unzip =
-      ./unzip.dhall sha256:d016c01ba91657a2f35609aa29087963d0f506bab0f41d5e8b7cd289dff39708
+      ./unzip.dhall
+        sha256:d016c01ba91657a2f35609aa29087963d0f506bab0f41d5e8b7cd289dff39708
     ? ./unzip.dhall
 }
diff --git a/dhall-lang/Prelude/Optional/toList b/dhall-lang/Prelude/Optional/toList
--- a/dhall-lang/Prelude/Optional/toList
+++ b/dhall-lang/Prelude/Optional/toList
@@ -1,2 +1,3 @@
-  ./toList.dhall sha256:d78f160c619119ef12389e48a629ce293d69f7624c8d016b7a4767ab400344c4
+  ./toList.dhall
+    sha256:d78f160c619119ef12389e48a629ce293d69f7624c8d016b7a4767ab400344c4
 ? ./toList.dhall
diff --git a/dhall-lang/Prelude/Optional/unzip b/dhall-lang/Prelude/Optional/unzip
--- a/dhall-lang/Prelude/Optional/unzip
+++ b/dhall-lang/Prelude/Optional/unzip
@@ -1,2 +1,3 @@
-  ./unzip.dhall sha256:d016c01ba91657a2f35609aa29087963d0f506bab0f41d5e8b7cd289dff39708
+  ./unzip.dhall
+    sha256:d016c01ba91657a2f35609aa29087963d0f506bab0f41d5e8b7cd289dff39708
 ? ./unzip.dhall
diff --git a/dhall-lang/Prelude/Text/concat b/dhall-lang/Prelude/Text/concat
--- a/dhall-lang/Prelude/Text/concat
+++ b/dhall-lang/Prelude/Text/concat
@@ -1,2 +1,3 @@
-  ./concat.dhall sha256:731265b0288e8a905ecff95c97333ee2db614c39d69f1514cb8eed9259745fc0
+  ./concat.dhall
+    sha256:731265b0288e8a905ecff95c97333ee2db614c39d69f1514cb8eed9259745fc0
 ? ./concat.dhall
diff --git a/dhall-lang/Prelude/Text/concatMap b/dhall-lang/Prelude/Text/concatMap
--- a/dhall-lang/Prelude/Text/concatMap
+++ b/dhall-lang/Prelude/Text/concatMap
@@ -1,2 +1,3 @@
-  ./concatMap.dhall sha256:7a0b0b99643de69d6f94ba49441cd0fa0507cbdfa8ace0295f16097af37e226f
+  ./concatMap.dhall
+    sha256:7a0b0b99643de69d6f94ba49441cd0fa0507cbdfa8ace0295f16097af37e226f
 ? ./concatMap.dhall
diff --git a/dhall-lang/Prelude/Text/concatMapSep b/dhall-lang/Prelude/Text/concatMapSep
--- a/dhall-lang/Prelude/Text/concatMapSep
+++ b/dhall-lang/Prelude/Text/concatMapSep
@@ -1,2 +1,3 @@
-  ./concatMapSep.dhall sha256:c272aca80a607bc5963d1fcb38819e7e0d3e72ac4d02b1183b1afb6a91340840
+  ./concatMapSep.dhall
+    sha256:c272aca80a607bc5963d1fcb38819e7e0d3e72ac4d02b1183b1afb6a91340840
 ? ./concatMapSep.dhall
diff --git a/dhall-lang/Prelude/Text/concatSep b/dhall-lang/Prelude/Text/concatSep
--- a/dhall-lang/Prelude/Text/concatSep
+++ b/dhall-lang/Prelude/Text/concatSep
@@ -1,2 +1,3 @@
-  ./concatSep.dhall sha256:e4401d69918c61b92a4c0288f7d60a6560ca99726138ed8ebc58dca2cd205e58
+  ./concatSep.dhall
+    sha256:e4401d69918c61b92a4c0288f7d60a6560ca99726138ed8ebc58dca2cd205e58
 ? ./concatSep.dhall
diff --git a/dhall-lang/Prelude/Text/default b/dhall-lang/Prelude/Text/default
--- a/dhall-lang/Prelude/Text/default
+++ b/dhall-lang/Prelude/Text/default
@@ -1,2 +1,3 @@
-  ./default.dhall sha256:f532c8891b1e427d90a6cc07cf7e793a4c84b0765e1bfe69f186ee2ec91c1edf
+  ./default.dhall
+    sha256:f532c8891b1e427d90a6cc07cf7e793a4c84b0765e1bfe69f186ee2ec91c1edf
 ? ./default.dhall
diff --git a/dhall-lang/Prelude/Text/defaultMap b/dhall-lang/Prelude/Text/defaultMap
--- a/dhall-lang/Prelude/Text/defaultMap
+++ b/dhall-lang/Prelude/Text/defaultMap
@@ -1,2 +1,3 @@
-  ./defaultMap.dhall sha256:3a3fa1264f6198800c27483cb144de2c5366484876d60b9c739a710ce0288588
+  ./defaultMap.dhall
+    sha256:3a3fa1264f6198800c27483cb144de2c5366484876d60b9c739a710ce0288588
 ? ./defaultMap.dhall
diff --git a/dhall-lang/Prelude/Text/package.dhall b/dhall-lang/Prelude/Text/package.dhall
--- a/dhall-lang/Prelude/Text/package.dhall
+++ b/dhall-lang/Prelude/Text/package.dhall
@@ -1,37 +1,49 @@
 { concat =
-      ./concat.dhall sha256:731265b0288e8a905ecff95c97333ee2db614c39d69f1514cb8eed9259745fc0
+      ./concat.dhall
+        sha256:731265b0288e8a905ecff95c97333ee2db614c39d69f1514cb8eed9259745fc0
     ? ./concat.dhall
 , concatMap =
-      ./concatMap.dhall sha256:7a0b0b99643de69d6f94ba49441cd0fa0507cbdfa8ace0295f16097af37e226f
+      ./concatMap.dhall
+        sha256:7a0b0b99643de69d6f94ba49441cd0fa0507cbdfa8ace0295f16097af37e226f
     ? ./concatMap.dhall
 , concatMapSep =
-      ./concatMapSep.dhall sha256:c272aca80a607bc5963d1fcb38819e7e0d3e72ac4d02b1183b1afb6a91340840
+      ./concatMapSep.dhall
+        sha256:c272aca80a607bc5963d1fcb38819e7e0d3e72ac4d02b1183b1afb6a91340840
     ? ./concatMapSep.dhall
 , concatSep =
-      ./concatSep.dhall sha256:e4401d69918c61b92a4c0288f7d60a6560ca99726138ed8ebc58dca2cd205e58
+      ./concatSep.dhall
+        sha256:e4401d69918c61b92a4c0288f7d60a6560ca99726138ed8ebc58dca2cd205e58
     ? ./concatSep.dhall
 , default =
-      ./default.dhall sha256:f532c8891b1e427d90a6cc07cf7e793a4c84b0765e1bfe69f186ee2ec91c1edf
+      ./default.dhall
+        sha256:f532c8891b1e427d90a6cc07cf7e793a4c84b0765e1bfe69f186ee2ec91c1edf
     ? ./default.dhall
 , defaultMap =
-      ./defaultMap.dhall sha256:3a3fa1264f6198800c27483cb144de2c5366484876d60b9c739a710ce0288588
+      ./defaultMap.dhall
+        sha256:3a3fa1264f6198800c27483cb144de2c5366484876d60b9c739a710ce0288588
     ? ./defaultMap.dhall
 , lowerASCII =
-      ./lowerASCII.dhall sha256:26b076651120b907e869396bd3dc16271f2e12433062b2f26f296968a69515e7
+      ./lowerASCII.dhall
+        sha256:26b076651120b907e869396bd3dc16271f2e12433062b2f26f296968a69515e7
     ? ./lowerASCII.dhall
 , replace =
-      ./replace.dhall sha256:7d132df0e091a43817bba8afa06d1bb487ee51c091430404ad6f8c78bc0328a6
+      ./replace.dhall
+        sha256:7d132df0e091a43817bba8afa06d1bb487ee51c091430404ad6f8c78bc0328a6
     ? ./replace.dhall
 , replicate =
-      ./replicate.dhall sha256:1b398b1d464b3a6c7264a690ac3cacb443b5683b43348c859d68e7c2cb925c4f
+      ./replicate.dhall
+        sha256:1b398b1d464b3a6c7264a690ac3cacb443b5683b43348c859d68e7c2cb925c4f
     ? ./replicate.dhall
 , show =
-      ./show.dhall sha256:c9dc5de3e5f32872dbda57166804865e5e80785abe358ff61f1d8ac45f1f4784
+      ./show.dhall
+        sha256:c9dc5de3e5f32872dbda57166804865e5e80785abe358ff61f1d8ac45f1f4784
     ? ./show.dhall
 , spaces =
-      ./spaces.dhall sha256:fccfd4f26601e006bf6a79ca948dbd37c676cdd0db439554447320293d23b3dc
+      ./spaces.dhall
+        sha256:fccfd4f26601e006bf6a79ca948dbd37c676cdd0db439554447320293d23b3dc
     ? ./spaces.dhall
 , upperASCII =
-      ./upperASCII.dhall sha256:45ae4fbd814b0474e65c28a4ee92b23b979892fa5bb73730bc99675ae790ca29
+      ./upperASCII.dhall
+        sha256:45ae4fbd814b0474e65c28a4ee92b23b979892fa5bb73730bc99675ae790ca29
     ? ./upperASCII.dhall
 }
diff --git a/dhall-lang/Prelude/Text/replicate b/dhall-lang/Prelude/Text/replicate
--- a/dhall-lang/Prelude/Text/replicate
+++ b/dhall-lang/Prelude/Text/replicate
@@ -1,2 +1,3 @@
-  ./replicate.dhall sha256:1b398b1d464b3a6c7264a690ac3cacb443b5683b43348c859d68e7c2cb925c4f
+  ./replicate.dhall
+    sha256:1b398b1d464b3a6c7264a690ac3cacb443b5683b43348c859d68e7c2cb925c4f
 ? ./replicate.dhall
diff --git a/dhall-lang/Prelude/Text/replicate.dhall b/dhall-lang/Prelude/Text/replicate.dhall
--- a/dhall-lang/Prelude/Text/replicate.dhall
+++ b/dhall-lang/Prelude/Text/replicate.dhall
@@ -1,10 +1,12 @@
 --| Build a Text by copying the given Text the specified number of times
 let concat =
-        ./concat.dhall sha256:731265b0288e8a905ecff95c97333ee2db614c39d69f1514cb8eed9259745fc0
+        ./concat.dhall
+          sha256:731265b0288e8a905ecff95c97333ee2db614c39d69f1514cb8eed9259745fc0
       ? ./concat.dhall
 
 let List/replicate =
-        ../List/replicate.dhall sha256:d4250b45278f2d692302489ac3e78280acb238d27541c837ce46911ff3baa347
+        ../List/replicate.dhall
+          sha256:d4250b45278f2d692302489ac3e78280acb238d27541c837ce46911ff3baa347
       ? ../List/replicate.dhall
 
 let replicate
diff --git a/dhall-lang/Prelude/Text/show b/dhall-lang/Prelude/Text/show
--- a/dhall-lang/Prelude/Text/show
+++ b/dhall-lang/Prelude/Text/show
@@ -1,2 +1,3 @@
-  ./show.dhall sha256:c9dc5de3e5f32872dbda57166804865e5e80785abe358ff61f1d8ac45f1f4784
+  ./show.dhall
+    sha256:c9dc5de3e5f32872dbda57166804865e5e80785abe358ff61f1d8ac45f1f4784
 ? ./show.dhall
diff --git a/dhall-lang/Prelude/Text/spaces b/dhall-lang/Prelude/Text/spaces
--- a/dhall-lang/Prelude/Text/spaces
+++ b/dhall-lang/Prelude/Text/spaces
@@ -1,2 +1,3 @@
-  ./spaces.dhall sha256:fccfd4f26601e006bf6a79ca948dbd37c676cdd0db439554447320293d23b3dc
+  ./spaces.dhall
+    sha256:fccfd4f26601e006bf6a79ca948dbd37c676cdd0db439554447320293d23b3dc
 ? ./spaces.dhall
diff --git a/dhall-lang/Prelude/Text/spaces.dhall b/dhall-lang/Prelude/Text/spaces.dhall
--- a/dhall-lang/Prelude/Text/spaces.dhall
+++ b/dhall-lang/Prelude/Text/spaces.dhall
@@ -5,7 +5,8 @@
 whitespace is significant, i.e. with nested indentation.
 -}
 let replicate =
-        ./replicate.dhall sha256:1b398b1d464b3a6c7264a690ac3cacb443b5683b43348c859d68e7c2cb925c4f
+        ./replicate.dhall
+          sha256:1b398b1d464b3a6c7264a690ac3cacb443b5683b43348c859d68e7c2cb925c4f
       ? ./replicate.dhall
 
 let spaces
diff --git a/dhall-lang/Prelude/XML/Type b/dhall-lang/Prelude/XML/Type
--- a/dhall-lang/Prelude/XML/Type
+++ b/dhall-lang/Prelude/XML/Type
@@ -1,2 +1,3 @@
-  ./Type.dhall sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c
+  ./Type.dhall
+    sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c
 ? ./Type.dhall
diff --git a/dhall-lang/Prelude/XML/attribute b/dhall-lang/Prelude/XML/attribute
--- a/dhall-lang/Prelude/XML/attribute
+++ b/dhall-lang/Prelude/XML/attribute
@@ -1,2 +1,3 @@
-  ./attribute.dhall sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc
+  ./attribute.dhall
+    sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc
 ? ./attribute.dhall
diff --git a/dhall-lang/Prelude/XML/element b/dhall-lang/Prelude/XML/element
--- a/dhall-lang/Prelude/XML/element
+++ b/dhall-lang/Prelude/XML/element
@@ -1,2 +1,3 @@
-  ./element.dhall sha256:e0b948053c8cd8ccca9c39244d89e3f42db43d222531c18151551dfc75208b4b
+  ./element.dhall
+    sha256:e0b948053c8cd8ccca9c39244d89e3f42db43d222531c18151551dfc75208b4b
 ? ./element.dhall
diff --git a/dhall-lang/Prelude/XML/element.dhall b/dhall-lang/Prelude/XML/element.dhall
--- a/dhall-lang/Prelude/XML/element.dhall
+++ b/dhall-lang/Prelude/XML/element.dhall
@@ -19,11 +19,13 @@
 ```
 -}
 let XML =
-        ./Type.dhall sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c
+        ./Type.dhall
+          sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c
       ? ./Type.dhall
 
 let List/map =
-        ../List/map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
+        ../List/map.dhall
+          sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
       ? ../List/map.dhall
 
 let Args =
diff --git a/dhall-lang/Prelude/XML/emptyAttributes b/dhall-lang/Prelude/XML/emptyAttributes
--- a/dhall-lang/Prelude/XML/emptyAttributes
+++ b/dhall-lang/Prelude/XML/emptyAttributes
@@ -1,2 +1,3 @@
-  ./emptyAttributes.dhall sha256:11b86e2d3f3c75d47a1d580213d2a03fd2c36d64f3e9b6381de0ba23472f64d5
+  ./emptyAttributes.dhall
+    sha256:11b86e2d3f3c75d47a1d580213d2a03fd2c36d64f3e9b6381de0ba23472f64d5
 ? ./emptyAttributes.dhall
diff --git a/dhall-lang/Prelude/XML/leaf b/dhall-lang/Prelude/XML/leaf
--- a/dhall-lang/Prelude/XML/leaf
+++ b/dhall-lang/Prelude/XML/leaf
@@ -1,2 +1,3 @@
-  ./leaf.dhall sha256:4383e4fc4bf6a29ac2052776972eb59d5355a1cd067cded80d4ff32840969261
+  ./leaf.dhall
+    sha256:4383e4fc4bf6a29ac2052776972eb59d5355a1cd067cded80d4ff32840969261
 ? ./leaf.dhall
diff --git a/dhall-lang/Prelude/XML/leaf.dhall b/dhall-lang/Prelude/XML/leaf.dhall
--- a/dhall-lang/Prelude/XML/leaf.dhall
+++ b/dhall-lang/Prelude/XML/leaf.dhall
@@ -10,11 +10,13 @@
 ```
 -}
 let XML =
-        ./Type.dhall sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c
+        ./Type.dhall
+          sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c
       ? ./Type.dhall
 
 let element =
-        ./element.dhall sha256:e0b948053c8cd8ccca9c39244d89e3f42db43d222531c18151551dfc75208b4b
+        ./element.dhall
+          sha256:e0b948053c8cd8ccca9c39244d89e3f42db43d222531c18151551dfc75208b4b
       ? ./element.dhall
 
 let leaf
diff --git a/dhall-lang/Prelude/XML/package.dhall b/dhall-lang/Prelude/XML/package.dhall
--- a/dhall-lang/Prelude/XML/package.dhall
+++ b/dhall-lang/Prelude/XML/package.dhall
@@ -1,22 +1,29 @@
 { Type =
-      ./Type.dhall sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c
+      ./Type.dhall
+        sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c
     ? ./Type.dhall
 , attribute =
-      ./attribute.dhall sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc
+      ./attribute.dhall
+        sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc
     ? ./attribute.dhall
 , render =
-      ./render.dhall sha256:550c8900fe199b83d629181d53c646f2f9425d9c64670dabb30d28e95bfa4c75
+      ./render.dhall
+        sha256:550c8900fe199b83d629181d53c646f2f9425d9c64670dabb30d28e95bfa4c75
     ? ./render.dhall
 , element =
-      ./element.dhall sha256:e0b948053c8cd8ccca9c39244d89e3f42db43d222531c18151551dfc75208b4b
+      ./element.dhall
+        sha256:e0b948053c8cd8ccca9c39244d89e3f42db43d222531c18151551dfc75208b4b
     ? ./element.dhall
 , leaf =
-      ./leaf.dhall sha256:4383e4fc4bf6a29ac2052776972eb59d5355a1cd067cded80d4ff32840969261
+      ./leaf.dhall
+        sha256:4383e4fc4bf6a29ac2052776972eb59d5355a1cd067cded80d4ff32840969261
     ? ./leaf.dhall
 , text =
-      ./text.dhall sha256:c83cd721d32d7dc28c04ce429c0cb22812639e572637ec348578a58ffb68844f
+      ./text.dhall
+        sha256:c83cd721d32d7dc28c04ce429c0cb22812639e572637ec348578a58ffb68844f
     ? ./text.dhall
 , emptyAttributes =
-      ./emptyAttributes.dhall sha256:11b86e2d3f3c75d47a1d580213d2a03fd2c36d64f3e9b6381de0ba23472f64d5
+      ./emptyAttributes.dhall
+        sha256:11b86e2d3f3c75d47a1d580213d2a03fd2c36d64f3e9b6381de0ba23472f64d5
     ? ./emptyAttributes.dhall
 }
diff --git a/dhall-lang/Prelude/XML/render b/dhall-lang/Prelude/XML/render
--- a/dhall-lang/Prelude/XML/render
+++ b/dhall-lang/Prelude/XML/render
@@ -1,2 +1,3 @@
-  ./render.dhall sha256:550c8900fe199b83d629181d53c646f2f9425d9c64670dabb30d28e95bfa4c75
+  ./render.dhall
+    sha256:550c8900fe199b83d629181d53c646f2f9425d9c64670dabb30d28e95bfa4c75
 ? ./render.dhall
diff --git a/dhall-lang/Prelude/XML/render.dhall b/dhall-lang/Prelude/XML/render.dhall
--- a/dhall-lang/Prelude/XML/render.dhall
+++ b/dhall-lang/Prelude/XML/render.dhall
@@ -19,27 +19,33 @@
 
 -}
 let XML =
-        ./Type.dhall sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c
+        ./Type.dhall
+          sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c
       ? ./Type.dhall
 
 let Text/concatMap =
-        ../Text/concatMap.dhall sha256:7a0b0b99643de69d6f94ba49441cd0fa0507cbdfa8ace0295f16097af37e226f
+        ../Text/concatMap.dhall
+          sha256:7a0b0b99643de69d6f94ba49441cd0fa0507cbdfa8ace0295f16097af37e226f
       ? ../Text/concatMap.dhall
 
 let Text/concat =
-        ../Text/concat.dhall sha256:731265b0288e8a905ecff95c97333ee2db614c39d69f1514cb8eed9259745fc0
+        ../Text/concat.dhall
+          sha256:731265b0288e8a905ecff95c97333ee2db614c39d69f1514cb8eed9259745fc0
       ? ../Text/concat.dhall
 
 let element =
-        ./element.dhall sha256:e0b948053c8cd8ccca9c39244d89e3f42db43d222531c18151551dfc75208b4b
+        ./element.dhall
+          sha256:e0b948053c8cd8ccca9c39244d89e3f42db43d222531c18151551dfc75208b4b
       ? ./element.dhall
 
 let text =
-        ./text.dhall sha256:c83cd721d32d7dc28c04ce429c0cb22812639e572637ec348578a58ffb68844f
+        ./text.dhall
+          sha256:c83cd721d32d7dc28c04ce429c0cb22812639e572637ec348578a58ffb68844f
       ? ./text.dhall
 
 let emptyAttributes =
-        ./emptyAttributes.dhall sha256:11b86e2d3f3c75d47a1d580213d2a03fd2c36d64f3e9b6381de0ba23472f64d5
+        ./emptyAttributes.dhall
+          sha256:11b86e2d3f3c75d47a1d580213d2a03fd2c36d64f3e9b6381de0ba23472f64d5
       ? ./emptyAttributes.dhall
 
 let Attr = { mapKey : Text, mapValue : Text }
diff --git a/dhall-lang/Prelude/XML/text b/dhall-lang/Prelude/XML/text
--- a/dhall-lang/Prelude/XML/text
+++ b/dhall-lang/Prelude/XML/text
@@ -1,2 +1,3 @@
-  ./text.dhall sha256:c83cd721d32d7dc28c04ce429c0cb22812639e572637ec348578a58ffb68844f
+  ./text.dhall
+    sha256:c83cd721d32d7dc28c04ce429c0cb22812639e572637ec348578a58ffb68844f
 ? ./text.dhall
diff --git a/dhall-lang/Prelude/XML/text.dhall b/dhall-lang/Prelude/XML/text.dhall
--- a/dhall-lang/Prelude/XML/text.dhall
+++ b/dhall-lang/Prelude/XML/text.dhall
@@ -15,7 +15,8 @@
 ```
 -}
 let XML =
-        ./Type.dhall sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c
+        ./Type.dhall
+          sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c
       ? ./Type.dhall
 
 let text
diff --git a/dhall-lang/Prelude/package.dhall b/dhall-lang/Prelude/package.dhall
--- a/dhall-lang/Prelude/package.dhall
+++ b/dhall-lang/Prelude/package.dhall
@@ -1,43 +1,61 @@
 { Bool =
-      ./Bool/package.dhall sha256:7ee950e7c2142be5923f76d00263e536b71d96cb9c190d7743c1679501ddeb0a
+      ./Bool/package.dhall
+        sha256:7ee950e7c2142be5923f76d00263e536b71d96cb9c190d7743c1679501ddeb0a
     ? ./Bool/package.dhall
 , Double =
-      ./Double/package.dhall sha256:b8d20ab3216083622ae371fb42a6732bc67bb2d66e84989c8ddba7556a336cf7
+      ./Double/package.dhall
+        sha256:b8d20ab3216083622ae371fb42a6732bc67bb2d66e84989c8ddba7556a336cf7
     ? ./Double/package.dhall
 , Function =
-      ./Function/package.dhall sha256:6d17cf0fd4fabe1737fb117f87c04b8ff82b299915a5b673c0a543b134b8fffe
+      ./Function/package.dhall
+        sha256:6d17cf0fd4fabe1737fb117f87c04b8ff82b299915a5b673c0a543b134b8fffe
     ? ./Function/package.dhall
 , Integer =
-      ./Integer/package.dhall sha256:d1a572ca3a764781496847e4921d7d9a881c18ffcfac6ae28d0e5299066938a0
+      ./Integer/package.dhall
+        sha256:d1a572ca3a764781496847e4921d7d9a881c18ffcfac6ae28d0e5299066938a0
     ? ./Integer/package.dhall
 , List =
-      ./List/package.dhall sha256:11081c23436cb9c5fa60d53416e62845071990b43b3c48973cb2f19f5d5adbee
+      ./List/package.dhall
+        sha256:11081c23436cb9c5fa60d53416e62845071990b43b3c48973cb2f19f5d5adbee
     ? ./List/package.dhall
 , Location =
-      ./Location/package.dhall sha256:0eb4e4a60814018009c720f6820aaa13cf9491eb1b09afb7b832039c6ee4d470
+      ./Location/package.dhall
+        sha256:0eb4e4a60814018009c720f6820aaa13cf9491eb1b09afb7b832039c6ee4d470
     ? ./Location/package.dhall
 , Map =
-      ./Map/package.dhall sha256:c6602939eb75ddaf43e75a37e1f27ace97e03685ceb9d77605b4372547f7cfa8
+      ./Map/package.dhall
+        sha256:c6602939eb75ddaf43e75a37e1f27ace97e03685ceb9d77605b4372547f7cfa8
     ? ./Map/package.dhall
 , Monoid =
-      ./Monoid.dhall sha256:26fafa098600ef7a54ef9dba5ada416bbbdd21df1af306c052420c61553ad4af
+      ./Monoid.dhall
+        sha256:26fafa098600ef7a54ef9dba5ada416bbbdd21df1af306c052420c61553ad4af
     ? ./Monoid.dhall
 , Natural =
-      ./Natural/package.dhall sha256:ee9ed2b28a417ed4e9a0c284801b928bf91b3fbdc1a68616347678c1821f1ddf
+      ./Natural/package.dhall
+        sha256:ee9ed2b28a417ed4e9a0c284801b928bf91b3fbdc1a68616347678c1821f1ddf
     ? ./Natural/package.dhall
+, NonEmpty =
+      ./NonEmpty/package.dhall
+        sha256:c24686a230a4b3cd51e5a57cd4510b4f8242f813d7823d41bac5954e7af56f7a
+    ? ./NonEmpty/package.dhall
 , Operator =
-      ./Operator/package.dhall sha256:861f724704a7b4755c96f173e54d03f314492a2d046723404c31ff612b7bf2e6
+      ./Operator/package.dhall
+        sha256:861f724704a7b4755c96f173e54d03f314492a2d046723404c31ff612b7bf2e6
     ? ./Operator/package.dhall
 , Optional =
-      ./Optional/package.dhall sha256:37b84d6fe94c591d603d7b06527a2d3439ba83361e9326bc7b72517c7dc54d4e
+      ./Optional/package.dhall
+        sha256:37b84d6fe94c591d603d7b06527a2d3439ba83361e9326bc7b72517c7dc54d4e
     ? ./Optional/package.dhall
 , JSON =
-      ./JSON/package.dhall sha256:5f98b7722fd13509ef448b075e02b9ff98312ae7a406cf53ed25012dbc9990ac
+      ./JSON/package.dhall
+        sha256:5f98b7722fd13509ef448b075e02b9ff98312ae7a406cf53ed25012dbc9990ac
     ? ./JSON/package.dhall
 , Text =
-      ./Text/package.dhall sha256:17a0e0e881b05436d7e3ae94a658af9da5ba2a921fafa0d1d545890978853434
+      ./Text/package.dhall
+        sha256:17a0e0e881b05436d7e3ae94a658af9da5ba2a921fafa0d1d545890978853434
     ? ./Text/package.dhall
 , XML =
-      ./XML/package.dhall sha256:6a15ea2ab1918f97374ec2fe3b90c056fb807fb3a90c1c44ce9fb9233f59c0e5
+      ./XML/package.dhall
+        sha256:6a15ea2ab1918f97374ec2fe3b90c056fb807fb3a90c1c44ce9fb9233f59c0e5
     ? ./XML/package.dhall
 }
diff --git a/dhall-lang/tests/binary-decode/success/unit/DateA.dhallb b/dhall-lang/tests/binary-decode/success/unit/DateA.dhallb
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/binary-decode/success/unit/DateA.dhallb
@@ -0,0 +1,1 @@
+Ð
diff --git a/dhall-lang/tests/binary-decode/success/unit/DateB.dhall b/dhall-lang/tests/binary-decode/success/unit/DateB.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/binary-decode/success/unit/DateB.dhall
@@ -0,0 +1,1 @@
+2000-01-01
diff --git a/dhall-lang/tests/binary-decode/success/unit/TimeA.dhallb b/dhall-lang/tests/binary-decode/success/unit/TimeA.dhallb
new file mode 100644
Binary files /dev/null and b/dhall-lang/tests/binary-decode/success/unit/TimeA.dhallb differ
diff --git a/dhall-lang/tests/binary-decode/success/unit/TimeB.dhall b/dhall-lang/tests/binary-decode/success/unit/TimeB.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/binary-decode/success/unit/TimeB.dhall
@@ -0,0 +1,1 @@
+12:00:00
diff --git a/dhall-lang/tests/binary-decode/success/unit/TimeZoneA.dhallb b/dhall-lang/tests/binary-decode/success/unit/TimeZoneA.dhallb
new file mode 100644
Binary files /dev/null and b/dhall-lang/tests/binary-decode/success/unit/TimeZoneA.dhallb differ
diff --git a/dhall-lang/tests/binary-decode/success/unit/TimeZoneB.dhall b/dhall-lang/tests/binary-decode/success/unit/TimeZoneB.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/binary-decode/success/unit/TimeZoneB.dhall
@@ -0,0 +1,1 @@
++08:00
diff --git a/dhall-lang/tests/import/data/doesNotParse.dhall b/dhall-lang/tests/import/data/doesNotParse.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/import/data/doesNotParse.dhall
@@ -0,0 +1,1 @@
+[
diff --git a/dhall-lang/tests/import/failure/unit/DontRecoverCycle.dhall b/dhall-lang/tests/import/failure/unit/DontRecoverCycle.dhall
--- a/dhall-lang/tests/import/failure/unit/DontRecoverCycle.dhall
+++ b/dhall-lang/tests/import/failure/unit/DontRecoverCycle.dhall
@@ -1,1 +1,1 @@
-./cycle.dhall ? 0
+../../data/cycle.dhall ? 0
diff --git a/dhall-lang/tests/import/failure/unit/DontRecoverHashMismatch.dhall b/dhall-lang/tests/import/failure/unit/DontRecoverHashMismatch.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/import/failure/unit/DontRecoverHashMismatch.dhall
@@ -0,0 +1,3 @@
+-- This fails because the `?` operator does not recover from integrity check
+-- failures
+../../data/simple.dhall sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ? 0
diff --git a/dhall-lang/tests/import/failure/unit/DontRecoverParseError.dhall b/dhall-lang/tests/import/failure/unit/DontRecoverParseError.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/import/failure/unit/DontRecoverParseError.dhall
@@ -0,0 +1,1 @@
+../../data/doesNotParse.dhall ? 0
diff --git a/dhall-lang/tests/import/failure/unit/DontRecoverTypeError.dhall b/dhall-lang/tests/import/failure/unit/DontRecoverTypeError.dhall
--- a/dhall-lang/tests/import/failure/unit/DontRecoverTypeError.dhall
+++ b/dhall-lang/tests/import/failure/unit/DontRecoverTypeError.dhall
@@ -1,1 +1,1 @@
-../../../type-inference/failure/unit/VariableFree.dhall ? 0
+../../data/doesNotTypecheck.dhall ? 0
diff --git a/dhall-lang/tests/import/success/headerForwardingB.dhall b/dhall-lang/tests/import/success/headerForwardingB.dhall
--- a/dhall-lang/tests/import/success/headerForwardingB.dhall
+++ b/dhall-lang/tests/import/success/headerForwardingB.dhall
@@ -1,26 +1,18 @@
 { and =
-      λ(xs : List Bool)
-    → List/fold Bool xs Bool (λ(l : Bool) → λ(r : Bool) → l && r) True
-, build =
-      λ(f : ∀(bool : Type) → ∀(true : bool) → ∀(false : bool) → bool)
-    → f Bool True False
+    λ(_ : List Bool) →
+      List/fold Bool _ Bool (λ(_ : Bool) → λ(_ : Bool) → _@1 && _) True
+, build = λ(_ : Type → _ → _@1 → _@2) → _ Bool True False
 , even =
-      λ(xs : List Bool)
-    → List/fold Bool xs Bool (λ(x : Bool) → λ(y : Bool) → x == y) True
+    λ(_ : List Bool) →
+      List/fold Bool _ Bool (λ(_ : Bool) → λ(_ : Bool) → _@1 == _) True
 , fold =
-      λ(b : Bool)
-    → λ(bool : Type)
-    → λ(true : bool)
-    → λ(false : bool)
-    → if b then true else false
-, not =
-    λ(b : Bool) → b == False
+    λ(_ : Bool) → λ(_ : Type) → λ(_ : _) → λ(_ : _@1) → if _@3 then _@1 else _
+, not = λ(_ : Bool) → _ == False
 , odd =
-      λ(xs : List Bool)
-    → List/fold Bool xs Bool (λ(x : Bool) → λ(y : Bool) → x != y) False
+    λ(_ : List Bool) →
+      List/fold Bool _ Bool (λ(_ : Bool) → λ(_ : Bool) → _@1 != _) False
 , or =
-      λ(xs : List Bool)
-    → List/fold Bool xs Bool (λ(l : Bool) → λ(r : Bool) → l || r) False
-, show =
-    λ(b : Bool) → if b then "True" else "False"
+    λ(_ : List Bool) →
+      List/fold Bool _ Bool (λ(_ : Bool) → λ(_ : Bool) → _@1 || _) False
+, show = λ(_ : Bool) → if _ then "True" else "False"
 }
diff --git a/dhall-lang/tests/import/success/unit/AlternativeHashMismatchA.dhall b/dhall-lang/tests/import/success/unit/AlternativeHashMismatchA.dhall
deleted file mode 100644
--- a/dhall-lang/tests/import/success/unit/AlternativeHashMismatchA.dhall
+++ /dev/null
@@ -1,1 +0,0 @@
-../../data/simple.dhall sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ? 42
diff --git a/dhall-lang/tests/import/success/unit/AlternativeHashMismatchB.dhall b/dhall-lang/tests/import/success/unit/AlternativeHashMismatchB.dhall
deleted file mode 100644
--- a/dhall-lang/tests/import/success/unit/AlternativeHashMismatchB.dhall
+++ /dev/null
@@ -1,1 +0,0 @@
-42
diff --git a/dhall-lang/tests/import/success/unit/AlternativeParseErrorA.dhall b/dhall-lang/tests/import/success/unit/AlternativeParseErrorA.dhall
deleted file mode 100644
--- a/dhall-lang/tests/import/success/unit/AlternativeParseErrorA.dhall
+++ /dev/null
@@ -1,1 +0,0 @@
-../../data/example.txt ? 42
diff --git a/dhall-lang/tests/import/success/unit/AlternativeParseErrorB.dhall b/dhall-lang/tests/import/success/unit/AlternativeParseErrorB.dhall
deleted file mode 100644
--- a/dhall-lang/tests/import/success/unit/AlternativeParseErrorB.dhall
+++ /dev/null
@@ -1,1 +0,0 @@
-42
diff --git a/dhall-lang/tests/import/success/unit/AlternativeTypeErrorA.dhall b/dhall-lang/tests/import/success/unit/AlternativeTypeErrorA.dhall
deleted file mode 100644
--- a/dhall-lang/tests/import/success/unit/AlternativeTypeErrorA.dhall
+++ /dev/null
@@ -1,1 +0,0 @@
-../../data/doesNotTypecheck.dhall ? 42
diff --git a/dhall-lang/tests/import/success/unit/AlternativeTypeErrorB.dhall b/dhall-lang/tests/import/success/unit/AlternativeTypeErrorB.dhall
deleted file mode 100644
--- a/dhall-lang/tests/import/success/unit/AlternativeTypeErrorB.dhall
+++ /dev/null
@@ -1,1 +0,0 @@
-42
diff --git a/dhall-lang/tests/import/success/unit/AlternativeWithVariableB.dhall b/dhall-lang/tests/import/success/unit/AlternativeWithVariableB.dhall
--- a/dhall-lang/tests/import/success/unit/AlternativeWithVariableB.dhall
+++ b/dhall-lang/tests/import/success/unit/AlternativeWithVariableB.dhall
@@ -1,1 +1,1 @@
-0
+let x = 0 in x
diff --git a/dhall-lang/tests/import/success/unit/DontCacheIfHashB.dhall b/dhall-lang/tests/import/success/unit/DontCacheIfHashB.dhall
--- a/dhall-lang/tests/import/success/unit/DontCacheIfHashB.dhall
+++ b/dhall-lang/tests/import/success/unit/DontCacheIfHashB.dhall
@@ -1,1 +1,1 @@
-λ(_ : Type) → λ(_ : Optional _) → merge { `None` = True, `Some` = λ(_ : _@1) → False } _
+let x = 3 in λ(_ : Type) → λ(_ : Optional _) → merge { `None` = True, `Some` = λ(_ : _@1) → False } _
diff --git a/dhall-lang/tests/import/success/userHeadersA.dhall b/dhall-lang/tests/import/success/userHeadersA.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/import/success/userHeadersA.dhall
@@ -0,0 +1,1 @@
+https://httpbin.org/user-agent as Text
diff --git a/dhall-lang/tests/import/success/userHeadersB.dhall b/dhall-lang/tests/import/success/userHeadersB.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/import/success/userHeadersB.dhall
@@ -0,0 +1,5 @@
+''
+{
+  "user-agent": "Dhall"
+}
+''
diff --git a/dhall-lang/tests/import/success/userHeadersENV.dhall b/dhall-lang/tests/import/success/userHeadersENV.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/import/success/userHeadersENV.dhall
@@ -0,0 +1,10 @@
+toMap
+  { DHALL_HEADERS =
+      ''
+      toMap {
+        `httpbin.org:443` = toMap {
+          `User-Agent` = "Dhall"
+        }
+      }
+      ''
+  }
diff --git a/dhall-lang/tests/import/success/userHeadersOverrideA.dhall b/dhall-lang/tests/import/success/userHeadersOverrideA.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/import/success/userHeadersOverrideA.dhall
@@ -0,0 +1,3 @@
+https://httpbin.org/user-agent
+  using [ { mapKey = "User-Agent", mapValue = "inline-header" } ]
+  as Text
diff --git a/dhall-lang/tests/import/success/userHeadersOverrideB.dhall b/dhall-lang/tests/import/success/userHeadersOverrideB.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/import/success/userHeadersOverrideB.dhall
@@ -0,0 +1,5 @@
+''
+{
+  "user-agent": "user-header"
+}
+''
diff --git a/dhall-lang/tests/import/success/userHeadersOverrideENV.dhall b/dhall-lang/tests/import/success/userHeadersOverrideENV.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/import/success/userHeadersOverrideENV.dhall
@@ -0,0 +1,10 @@
+toMap
+  { DHALL_HEADERS =
+      ''
+      toMap {
+        `httpbin.org:443` = toMap {
+          `User-Agent` = "user-header"
+        }
+      }
+      ''
+  }
diff --git a/dhall-lang/tests/normalization/success/remoteSystemsA.dhall b/dhall-lang/tests/normalization/success/remoteSystemsA.dhall
--- a/dhall-lang/tests/normalization/success/remoteSystemsA.dhall
+++ b/dhall-lang/tests/normalization/success/remoteSystemsA.dhall
@@ -1,6 +1,6 @@
-let Text/concatMap = ../../../Prelude/Text/concatMap
+let Text/concatMap = ../../../Prelude/Text/concatMap.dhall
 
-let Text/concatSep = ../../../Prelude/Text/concatSep
+let Text/concatSep = ../../../Prelude/Text/concatSep.dhall
 
 let Row =
       { cores :
diff --git a/dhall-lang/tests/normalization/success/unit/TimeAsRecordA.dhall b/dhall-lang/tests/normalization/success/unit/TimeAsRecordA.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/normalization/success/unit/TimeAsRecordA.dhall
@@ -0,0 +1,2 @@
+-- Timestamps are records, and this is a no-op
+2000-01-01T12:00:00+08:00.{ time, date, timeZone }
diff --git a/dhall-lang/tests/normalization/success/unit/TimeAsRecordB.dhall b/dhall-lang/tests/normalization/success/unit/TimeAsRecordB.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/normalization/success/unit/TimeAsRecordB.dhall
@@ -0,0 +1,1 @@
+2000-01-01T12:00:00+08:00
diff --git a/dhall-lang/tests/parser/failure/unit/WithWhitespace.dhall b/dhall-lang/tests/parser/failure/unit/WithWhitespace.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/parser/failure/unit/WithWhitespace.dhall
@@ -0,0 +1,2 @@
+-- For https://github.com/dhall-lang/dhall-haskell/issues/2212
+{=}with foo = 0with bar = 1
diff --git a/dhall-lang/tests/parser/success/unit/DateA.dhall b/dhall-lang/tests/parser/success/unit/DateA.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/parser/success/unit/DateA.dhall
@@ -0,0 +1,1 @@
+Date
diff --git a/dhall-lang/tests/parser/success/unit/DateB.dhallb b/dhall-lang/tests/parser/success/unit/DateB.dhallb
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/parser/success/unit/DateB.dhallb
@@ -0,0 +1,1 @@
+dDate
diff --git a/dhall-lang/tests/parser/success/unit/DateLiteralA.dhall b/dhall-lang/tests/parser/success/unit/DateLiteralA.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/parser/success/unit/DateLiteralA.dhall
@@ -0,0 +1,1 @@
+2020-01-01
diff --git a/dhall-lang/tests/parser/success/unit/DateLiteralB.dhallb b/dhall-lang/tests/parser/success/unit/DateLiteralB.dhallb
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/parser/success/unit/DateLiteralB.dhallb
@@ -0,0 +1,1 @@
+ä
diff --git a/dhall-lang/tests/parser/success/unit/TimeA.dhall b/dhall-lang/tests/parser/success/unit/TimeA.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/parser/success/unit/TimeA.dhall
@@ -0,0 +1,1 @@
+Time
diff --git a/dhall-lang/tests/parser/success/unit/TimeB.dhallb b/dhall-lang/tests/parser/success/unit/TimeB.dhallb
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/parser/success/unit/TimeB.dhallb
@@ -0,0 +1,1 @@
+dTime
diff --git a/dhall-lang/tests/parser/success/unit/TimeLiteralA.dhall b/dhall-lang/tests/parser/success/unit/TimeLiteralA.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/parser/success/unit/TimeLiteralA.dhall
@@ -0,0 +1,1 @@
+12:00:00
diff --git a/dhall-lang/tests/parser/success/unit/TimeLiteralB.dhallb b/dhall-lang/tests/parser/success/unit/TimeLiteralB.dhallb
new file mode 100644
Binary files /dev/null and b/dhall-lang/tests/parser/success/unit/TimeLiteralB.dhallb differ
diff --git a/dhall-lang/tests/parser/success/unit/TimeZoneA.dhall b/dhall-lang/tests/parser/success/unit/TimeZoneA.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/parser/success/unit/TimeZoneA.dhall
@@ -0,0 +1,1 @@
+TimeZone
diff --git a/dhall-lang/tests/parser/success/unit/TimeZoneB.dhallb b/dhall-lang/tests/parser/success/unit/TimeZoneB.dhallb
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/parser/success/unit/TimeZoneB.dhallb
@@ -0,0 +1,1 @@
+hTimeZone
diff --git a/dhall-lang/tests/parser/success/unit/TimeZoneLiteralA.dhall b/dhall-lang/tests/parser/success/unit/TimeZoneLiteralA.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/parser/success/unit/TimeZoneLiteralA.dhall
@@ -0,0 +1,1 @@
++08:00
diff --git a/dhall-lang/tests/parser/success/unit/TimeZoneLiteralB.dhallb b/dhall-lang/tests/parser/success/unit/TimeZoneLiteralB.dhallb
new file mode 100644
Binary files /dev/null and b/dhall-lang/tests/parser/success/unit/TimeZoneLiteralB.dhallb differ
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/and/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/and/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/and/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/and/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/and [ True, False, True ]
+../../../../../../Prelude/Bool/and.dhall [ True, False, True ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/and/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/and/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/and/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/and/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/and ([] : List Bool)
+../../../../../../Prelude/Bool/and.dhall ([] : List Bool)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/build/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/build/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/build/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/build/0A.dhall
@@ -1,2 +1,2 @@
-../../../../../../Prelude/Bool/build 
+../../../../../../Prelude/Bool/build.dhall
 (λ(bool : Type) → λ(true : bool) → λ(false : bool) → true)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/build/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/build/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/build/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/build/1A.dhall
@@ -1,2 +1,2 @@
-../../../../../../Prelude/Bool/build 
+../../../../../../Prelude/Bool/build.dhall
 (λ(bool : Type) → λ(true : bool) → λ(false : bool) → false)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/even [ False, True, False ]
+../../../../../../Prelude/Bool/even.dhall [ False, True, False ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/even [ False, True ]
+../../../../../../Prelude/Bool/even.dhall [ False, True ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/2A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/2A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/2A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/2A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/even [ False ]
+../../../../../../Prelude/Bool/even.dhall [ False ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/3A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/3A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/3A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/even/3A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/even ([] : List Bool)
+../../../../../../Prelude/Bool/even.dhall ([] : List Bool)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/fold/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/fold/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/fold/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/fold/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/fold True Natural 0 1
+../../../../../../Prelude/Bool/fold.dhall True Natural 0 1
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/fold/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/fold/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/fold/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/fold/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/fold False Natural 0 1
+../../../../../../Prelude/Bool/fold.dhall False Natural 0 1
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/not/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/not/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/not/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/not/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/not True
+../../../../../../Prelude/Bool/not.dhall True
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/not/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/not/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/not/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/not/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/not False
+../../../../../../Prelude/Bool/not.dhall False
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/odd [ True, False, True ]
+../../../../../../Prelude/Bool/odd.dhall [ True, False, True ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/odd [ True, False ]
+../../../../../../Prelude/Bool/odd.dhall [ True, False ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/2A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/2A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/2A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/2A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/odd [ True ]
+../../../../../../Prelude/Bool/odd.dhall [ True ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/3A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/3A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/3A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/odd/3A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/odd ([] : List Bool)
+../../../../../../Prelude/Bool/odd.dhall ([] : List Bool)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/or/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/or/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/or/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/or/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/or [ True, False, True ]
+../../../../../../Prelude/Bool/or.dhall [ True, False, True ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/or/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/or/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/or/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/or/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/or ([] : List Bool)
+../../../../../../Prelude/Bool/or.dhall ([] : List Bool)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/show/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/show/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/show/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/show/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/show True
+../../../../../../Prelude/Bool/show.dhall True
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Bool/show/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Bool/show/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Bool/show/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Bool/show/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/show False
+../../../../../../Prelude/Bool/show.dhall False
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Double/show/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Double/show/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Double/show/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Double/show/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Double/show -3.1
+../../../../../../Prelude/Double/show.dhall -3.1
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Double/show/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Double/show/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Double/show/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Double/show/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Double/show 0.4
+../../../../../../Prelude/Double/show.dhall 0.4
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Integer/show/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Integer/show/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Integer/show/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Integer/show/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Integer/show -3
+../../../../../../Prelude/Integer/show.dhall -3
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Integer/show/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Integer/show/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Integer/show/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Integer/show/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Integer/show +0
+../../../../../../Prelude/Integer/show.dhall +0
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Integer/toDouble/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Integer/toDouble/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Integer/toDouble/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Integer/toDouble/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Integer/toDouble -3
+../../../../../../Prelude/Integer/toDouble.dhall -3
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Integer/toDouble/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Integer/toDouble/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Integer/toDouble/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Integer/toDouble/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Integer/toDouble +2
+../../../../../../Prelude/Integer/toDouble.dhall +2
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/all/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/all/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/all/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/all/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/all Natural Natural/even [ 2, 3, 5 ]
+../../../../../../Prelude/List/all.dhall Natural Natural/even [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/all/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/all/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/all/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/all/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/all Natural Natural/even ([] : List Natural)
+../../../../../../Prelude/List/all.dhall Natural Natural/even ([] : List Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/any/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/any/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/any/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/any/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/any Natural Natural/even [ 2, 3, 5 ]
+../../../../../../Prelude/List/any.dhall Natural Natural/even [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/any/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/any/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/any/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/any/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/any Natural Natural/even ([] : List Natural)
+../../../../../../Prelude/List/any.dhall Natural Natural/even ([] : List Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/build/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/build/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/build/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/build/0A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/List/build
+../../../../../../Prelude/List/build.dhall
 Text
 ( λ(list : Type)
 → λ(cons : Text → list → list)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/build/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/build/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/build/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/build/1A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/List/build
+../../../../../../Prelude/List/build.dhall
 Text
 ( λ(list : Type)
 → λ(cons : Text → list → list)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/concat/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/concat/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/concat/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/concat/0A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/List/concat Natural
+../../../../../../Prelude/List/concat.dhall Natural
 [ [ 0, 1, 2 ]
 , [ 3, 4 ]
 , [ 5, 6, 7, 8 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/concat/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/concat/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/concat/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/concat/1A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/List/concat Natural
+../../../../../../Prelude/List/concat.dhall Natural
 [ [] : List Natural
 , [] : List Natural
 , [] : List Natural
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/concatMap/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/concatMap/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/concatMap/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/concatMap/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/concatMap Natural Natural (λ(n : Natural) → [ n, n ]) [ 2, 3, 5 ]
+../../../../../../Prelude/List/concatMap.dhall Natural Natural (λ(n : Natural) → [ n, n ]) [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/concatMap/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/concatMap/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/concatMap/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/concatMap/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/concatMap Natural Natural (λ(n : Natural) → [ n, n ]) ([] : List Natural)
+../../../../../../Prelude/List/concatMap.dhall Natural Natural (λ(n : Natural) → [ n, n ]) ([] : List Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/filter/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/filter/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/filter/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/filter/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/filter Natural Natural/even [ 2, 3, 5 ]
+../../../../../../Prelude/List/filter.dhall Natural Natural/even [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/filter/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/filter/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/filter/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/filter/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/filter Natural Natural/odd [ 2, 3, 5 ]
+../../../../../../Prelude/List/filter.dhall Natural Natural/odd [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/fold/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/fold/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/fold/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/fold/0A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/List/fold
+../../../../../../Prelude/List/fold.dhall
 Natural
 [ 2, 3, 5 ]
 Natural
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/fold/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/fold/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/fold/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/fold/1A.dhall
@@ -1,5 +1,5 @@
   λ(nil : Natural)
-→ ../../../../../../Prelude/List/fold
+→ ../../../../../../Prelude/List/fold.dhall
   Natural
   [ 2, 3, 5 ]
   Natural
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/fold/2A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/fold/2A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/fold/2A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/fold/2A.dhall
@@ -1,4 +1,4 @@
   λ(list : Type)
 → λ(cons : Natural → list → list)
 → λ(nil : list)
-→ ../../../../../../Prelude/List/fold Natural [ 2, 3, 5 ] list cons nil
+→ ../../../../../../Prelude/List/fold.dhall Natural [ 2, 3, 5 ] list cons nil
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/generate/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/generate/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/generate/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/generate/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/generate 5 Bool Natural/even
+../../../../../../Prelude/List/generate.dhall 5 Bool Natural/even
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/generate/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/generate/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/generate/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/generate/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/generate 0 Bool Natural/even
+../../../../../../Prelude/List/generate.dhall 0 Bool Natural/even
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/head/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/head/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/head/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/head/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/head Natural [ 0, 1, 2 ]
+../../../../../../Prelude/List/head.dhall Natural [ 0, 1, 2 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/head/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/head/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/head/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/head/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/head Natural ([] : List Natural)
+../../../../../../Prelude/List/head.dhall Natural ([] : List Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/indexed/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/indexed/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/indexed/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/indexed/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/indexed Bool [ True, False, True ]
+../../../../../../Prelude/List/indexed.dhall Bool [ True, False, True ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/indexed/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/indexed/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/indexed/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/indexed/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/indexed Bool ([] : List Bool)
+../../../../../../Prelude/List/indexed.dhall Bool ([] : List Bool)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/iterate/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/iterate/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/iterate/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/iterate/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/iterate 10 Natural (λ(x : Natural) → x * 2) 1
+../../../../../../Prelude/List/iterate.dhall 10 Natural (λ(x : Natural) → x * 2) 1
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/iterate/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/iterate/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/iterate/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/iterate/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/iterate 0 Natural (λ(x : Natural) → x * 2) 1
+../../../../../../Prelude/List/iterate.dhall 0 Natural (λ(x : Natural) → x * 2) 1
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/last/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/last/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/last/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/last/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/last Natural [ 0, 1, 2 ]
+../../../../../../Prelude/List/last.dhall Natural [ 0, 1, 2 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/last/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/last/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/last/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/last/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/last Natural ([] : List Natural)
+../../../../../../Prelude/List/last.dhall Natural ([] : List Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/length/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/length/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/length/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/length/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/length Natural [ 0, 1, 2 ]
+../../../../../../Prelude/List/length.dhall Natural [ 0, 1, 2 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/length/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/length/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/length/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/length/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/length Natural ([] : List Natural)
+../../../../../../Prelude/List/length.dhall Natural ([] : List Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/map/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/map/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/map/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/map/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/map Natural Bool Natural/even [ 2, 3, 5 ]
+../../../../../../Prelude/List/map.dhall Natural Bool Natural/even [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/map/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/map/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/map/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/map/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/map Natural Bool Natural/even ([] : List Natural)
+../../../../../../Prelude/List/map.dhall Natural Bool Natural/even ([] : List Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/null/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/null/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/null/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/null/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/null Natural [ 0, 1, 2 ]
+../../../../../../Prelude/List/null.dhall Natural [ 0, 1, 2 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/null/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/null/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/null/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/null/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/null Natural ([] : List Natural)
+../../../../../../Prelude/List/null.dhall Natural ([] : List Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/replicate/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/replicate/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/replicate/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/replicate/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/replicate 9 Natural 1
+../../../../../../Prelude/List/replicate.dhall 9 Natural 1
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/replicate/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/replicate/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/replicate/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/replicate/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/replicate 0 Natural 1
+../../../../../../Prelude/List/replicate.dhall 0 Natural 1
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/reverse/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/reverse/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/reverse/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/reverse/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/reverse Natural [ 0, 1, 2 ]
+../../../../../../Prelude/List/reverse.dhall Natural [ 0, 1, 2 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/reverse/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/reverse/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/reverse/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/reverse/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/reverse Natural ([] : List Natural)
+../../../../../../Prelude/List/reverse.dhall Natural ([] : List Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/shifted/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/shifted/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/shifted/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/shifted/0A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/List/shifted
+../../../../../../Prelude/List/shifted.dhall
 Bool
 [ [ { index = 0, value = True }
   , { index = 1, value = True }
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/shifted/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/shifted/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/shifted/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/shifted/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/shifted Bool ([] : List (List { index : Natural, value : Bool }))
+../../../../../../Prelude/List/shifted.dhall Bool ([] : List (List { index : Natural, value : Bool }))
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/unzip/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/unzip/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/unzip/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/unzip/0A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/List/unzip
+../../../../../../Prelude/List/unzip.dhall
 Text
 Bool
 [ { _1 = "ABC", _2 = True }
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/List/unzip/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/List/unzip/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/List/unzip/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/List/unzip/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/unzip Text Bool ([] : List { _1 : Text, _2 : Bool })
+../../../../../../Prelude/List/unzip.dhall Text Bool ([] : List { _1 : Text, _2 : Bool })
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/build/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/build/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/build/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/build/0A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/Natural/build
+../../../../../../Prelude/Natural/build.dhall
 ( λ(natural : Type)
 → λ(succ : natural → natural)
 → λ(zero : natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/build/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/build/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/build/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/build/1A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/Natural/build
+../../../../../../Prelude/Natural/build.dhall
 ( λ(natural : Type)
 → λ(succ : natural → natural)
 → λ(zero : natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/enumerate/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/enumerate/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/enumerate/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/enumerate/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/enumerate 10
+../../../../../../Prelude/Natural/enumerate.dhall 10
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/enumerate/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/enumerate/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/enumerate/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/enumerate/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/enumerate 0
+../../../../../../Prelude/Natural/enumerate.dhall 0
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/even/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/even/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/even/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/even/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/even 3
+../../../../../../Prelude/Natural/even.dhall 3
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/even/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/even/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/even/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/even/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/even 0
+../../../../../../Prelude/Natural/even.dhall 0
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/fold/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/fold/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/fold/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/fold/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/fold 3 Natural (λ(x : Natural) → 5 * x) 1
+../../../../../../Prelude/Natural/fold.dhall 3 Natural (λ(x : Natural) → 5 * x) 1
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/fold/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/fold/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/fold/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/fold/1A.dhall
@@ -1,1 +1,1 @@
-λ(zero : Natural) → ../../../../../../Prelude/Natural/fold 3 Natural (λ(x : Natural) → 5 * x) zero
+λ(zero : Natural) → ../../../../../../Prelude/Natural/fold.dhall 3 Natural (λ(x : Natural) → 5 * x) zero
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/fold/2A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/fold/2A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/fold/2A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/fold/2A.dhall
@@ -1,4 +1,4 @@
   λ(natural : Type)
 → λ(succ : natural → natural)
 → λ(zero : natural)
-→ ../../../../../../Prelude/Natural/fold 3 natural succ zero
+→ ../../../../../../Prelude/Natural/fold.dhall 3 natural succ zero
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/isZero/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/isZero/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/isZero/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/isZero/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/isZero 2
+../../../../../../Prelude/Natural/isZero.dhall 2
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/isZero/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/isZero/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/isZero/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/isZero/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/isZero 0
+../../../../../../Prelude/Natural/isZero.dhall 0
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/odd/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/odd/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/odd/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/odd/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/odd 3
+../../../../../../Prelude/Natural/odd.dhall 3
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/odd/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/odd/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/odd/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/odd/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/odd 0
+../../../../../../Prelude/Natural/odd.dhall 0
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/product/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/product/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/product/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/product/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/product [ 2, 3, 5 ]
+../../../../../../Prelude/Natural/product.dhall [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/product/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/product/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/product/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/product/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/product ([] : List Natural)
+../../../../../../Prelude/Natural/product.dhall ([] : List Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/show/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/show/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/show/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/show/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/show 3
+../../../../../../Prelude/Natural/show.dhall 3
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/show/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/show/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/show/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/show/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/show 0
+../../../../../../Prelude/Natural/show.dhall 0
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/sum/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/sum/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/sum/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/sum/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/sum [ 2, 3, 5 ]
+../../../../../../Prelude/Natural/sum.dhall [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/sum/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/sum/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/sum/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/sum/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/sum ([] : List Natural)
+../../../../../../Prelude/Natural/sum.dhall ([] : List Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/toDouble/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/toDouble/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/toDouble/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/toDouble/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/toDouble 3
+../../../../../../Prelude/Natural/toDouble.dhall 3
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/toDouble/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/toDouble/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/toDouble/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/toDouble/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/toDouble 0
+../../../../../../Prelude/Natural/toDouble.dhall 0
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/toInteger/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/toInteger/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/toInteger/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/toInteger/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/toInteger 3
+../../../../../../Prelude/Natural/toInteger.dhall 3
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Natural/toInteger/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Natural/toInteger/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Natural/toInteger/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Natural/toInteger/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/toInteger 0
+../../../../../../Prelude/Natural/toInteger.dhall 0
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/all/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/all/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/all/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/all/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/all Natural Natural/even (Some 3)
+../../../../../../Prelude/Optional/all.dhall Natural Natural/even (Some 3)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/all/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/all/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/all/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/all/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/all Natural Natural/even (None Natural)
+../../../../../../Prelude/Optional/all.dhall Natural Natural/even (None Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/any/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/any/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/any/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/any/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/any Natural Natural/even (Some 2)
+../../../../../../Prelude/Optional/any.dhall Natural Natural/even (Some 2)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/any/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/any/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/any/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/any/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/any Natural Natural/even (None Natural)
+../../../../../../Prelude/Optional/any.dhall Natural Natural/even (None Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/build/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/build/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/build/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/build/0A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/Optional/build
+../../../../../../Prelude/Optional/build.dhall
 Natural
 ( λ(optional : Type)
 → λ(some : Natural → optional)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/build/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/build/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/build/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/build/1A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/Optional/build
+../../../../../../Prelude/Optional/build.dhall
 Natural
 ( λ(optional : Type)
 → λ(some : Natural → optional)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/concat/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/concat/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/concat/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/concat/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/concat Natural (Some (Some 1))
+../../../../../../Prelude/Optional/concat.dhall Natural (Some (Some 1))
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/concat/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/concat/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/concat/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/concat/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/concat Natural (Some (None Natural))
+../../../../../../Prelude/Optional/concat.dhall Natural (Some (None Natural))
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/concat/2A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/concat/2A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/concat/2A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/concat/2A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/concat Natural (None (Optional Natural))
+../../../../../../Prelude/Optional/concat.dhall Natural (None (Optional Natural))
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/filter/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/filter/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/filter/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/filter/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/filter Natural Natural/even (Some 2)
+../../../../../../Prelude/Optional/filter.dhall Natural Natural/even (Some 2)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/filter/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/filter/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/filter/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/filter/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/filter Natural Natural/odd (Some 2)
+../../../../../../Prelude/Optional/filter.dhall Natural Natural/odd (Some 2)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/fold/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/fold/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/fold/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/fold/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/fold Natural (Some 2) Natural (λ(x : Natural) → x) 0
+../../../../../../Prelude/Optional/fold.dhall Natural (Some 2) Natural (λ(x : Natural) → x) 0
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/fold/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/fold/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/fold/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/fold/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/fold Natural (None Natural) Natural (λ(x : Natural) → x) 0
+../../../../../../Prelude/Optional/fold.dhall Natural (None Natural) Natural (λ(x : Natural) → x) 0
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/head/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/head/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/head/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/head/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/head Natural [ None Natural, Some 1, Some 2 ]
+../../../../../../Prelude/Optional/head.dhall Natural [ None Natural, Some 1, Some 2 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/head/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/head/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/head/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/head/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/head Natural [ None Natural, None Natural ]
+../../../../../../Prelude/Optional/head.dhall Natural [ None Natural, None Natural ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/head/2A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/head/2A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/head/2A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/head/2A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/head Natural ([] : List (Optional Natural))
+../../../../../../Prelude/Optional/head.dhall Natural ([] : List (Optional Natural))
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/last/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/last/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/last/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/last/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/last Natural [ None Natural, Some 1, Some 2 ]
+../../../../../../Prelude/Optional/last.dhall Natural [ None Natural, Some 1, Some 2 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/last/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/last/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/last/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/last/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/last Natural [ None Natural, None Natural ]
+../../../../../../Prelude/Optional/last.dhall Natural [ None Natural, None Natural ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/last/2A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/last/2A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/last/2A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/last/2A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/last Natural ([] : List (Optional Natural))
+../../../../../../Prelude/Optional/last.dhall Natural ([] : List (Optional Natural))
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/length/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/length/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/length/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/length/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/length Natural (Some 2)
+../../../../../../Prelude/Optional/length.dhall Natural (Some 2)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/length/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/length/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/length/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/length/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/length Natural (None Natural)
+../../../../../../Prelude/Optional/length.dhall Natural (None Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/map/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/map/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/map/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/map/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/map Natural Bool Natural/even (Some 3)
+../../../../../../Prelude/Optional/map.dhall Natural Bool Natural/even (Some 3)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/map/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/map/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/map/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/map/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/map Natural Bool Natural/even (None Natural)
+../../../../../../Prelude/Optional/map.dhall Natural Bool Natural/even (None Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/null/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/null/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/null/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/null/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/null Natural (Some 2)
+../../../../../../Prelude/Optional/null.dhall Natural (Some 2)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/null/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/null/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/null/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/null/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/null Natural (None Natural)
+../../../../../../Prelude/Optional/null.dhall Natural (None Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/toList/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/toList/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/toList/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/toList/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/toList Natural (Some 1)
+../../../../../../Prelude/Optional/toList.dhall Natural (Some 1)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/toList/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/toList/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/toList/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/toList/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/toList Natural (None Natural)
+../../../../../../Prelude/Optional/toList.dhall Natural (None Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/unzip/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/unzip/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/unzip/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/unzip/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/unzip Text Bool (Some { _1 = "ABC", _2 = True })
+../../../../../../Prelude/Optional/unzip.dhall Text Bool (Some { _1 = "ABC", _2 = True })
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Optional/unzip/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Optional/unzip/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Optional/unzip/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Optional/unzip/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/unzip Text Bool (None { _1 : Text, _2 : Bool })
+../../../../../../Prelude/Optional/unzip.dhall Text Bool (None { _1 : Text, _2 : Bool })
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Text/concat/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Text/concat/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Text/concat/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Text/concat/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concat [ "ABC", "DEF", "GHI" ]
+../../../../../../Prelude/Text/concat.dhall [ "ABC", "DEF", "GHI" ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Text/concat/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Text/concat/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Text/concat/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Text/concat/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concat ([] : List Text)
+../../../../../../Prelude/Text/concat.dhall ([] : List Text)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMap/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMap/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMap/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMap/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concatMap Natural (λ(n : Natural) → "${Natural/show n} ") [ 0, 1, 2 ]
+../../../../../../Prelude/Text/concatMap.dhall Natural (λ(n : Natural) → "${Natural/show n} ") [ 0, 1, 2 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMap/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMap/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMap/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMap/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concatMap Natural (λ(n : Natural) → "${Natural/show n} ") ([] : List Natural)
+../../../../../../Prelude/Text/concatMap.dhall Natural (λ(n : Natural) → "${Natural/show n} ") ([] : List Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMapSep/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMapSep/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMapSep/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMapSep/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concatMapSep ", " Natural Natural/show [ 0, 1, 2 ]
+../../../../../../Prelude/Text/concatMapSep.dhall ", " Natural Natural/show [ 0, 1, 2 ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMapSep/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMapSep/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMapSep/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Text/concatMapSep/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concatMapSep ", " Natural Natural/show ([] : List Natural)
+../../../../../../Prelude/Text/concatMapSep.dhall ", " Natural Natural/show ([] : List Natural)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Text/concatSep/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Text/concatSep/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Text/concatSep/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Text/concatSep/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concatSep ", " [ "ABC", "DEF", "GHI" ]
+../../../../../../Prelude/Text/concatSep.dhall ", " [ "ABC", "DEF", "GHI" ]
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Text/concatSep/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Text/concatSep/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Text/concatSep/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Text/concatSep/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concatSep ", " ([] : List Text)
+../../../../../../Prelude/Text/concatSep.dhall ", " ([] : List Text)
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Text/show/0A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Text/show/0A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Text/show/0A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Text/show/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/show "ABC"
+../../../../../../Prelude/Text/show.dhall "ABC"
diff --git a/dhall-lang/tests/semantic-hash/success/prelude/Text/show/1A.dhall b/dhall-lang/tests/semantic-hash/success/prelude/Text/show/1A.dhall
--- a/dhall-lang/tests/semantic-hash/success/prelude/Text/show/1A.dhall
+++ b/dhall-lang/tests/semantic-hash/success/prelude/Text/show/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/show "\u0000 \$ \\ \n \u263a"
+../../../../../../Prelude/Text/show.dhall "\u0000 \$ \\ \n \u263a"
diff --git a/dhall-lang/tests/type-inference/failure/DateApplyTime.dhall b/dhall-lang/tests/type-inference/failure/DateApplyTime.dhall
new file mode 100644
--- /dev/null
+++ b/dhall-lang/tests/type-inference/failure/DateApplyTime.dhall
@@ -0,0 +1,3 @@
+-- This parses, but will fail to type-check, because in the absence of the `T`
+-- it is interpreted as a `Date` applied to a `Time`
+2020-01-01 12:00:00
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/and/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/and/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/and/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/and/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/and [ True, False, True ]
+../../../../../../Prelude/Bool/and.dhall [ True, False, True ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/and/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/and/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/and/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/and/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/and ([] : List Bool)
+../../../../../../Prelude/Bool/and.dhall ([] : List Bool)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/build/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/build/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/build/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/build/0A.dhall
@@ -1,2 +1,2 @@
-../../../../../../Prelude/Bool/build 
+../../../../../../Prelude/Bool/build.dhall
 (λ(bool : Type) → λ(true : bool) → λ(false : bool) → true)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/build/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/build/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/build/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/build/1A.dhall
@@ -1,2 +1,2 @@
-../../../../../../Prelude/Bool/build 
+../../../../../../Prelude/Bool/build.dhall
 (λ(bool : Type) → λ(true : bool) → λ(false : bool) → false)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/even/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/even/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/even/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/even/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/even [ False, True, False ]
+../../../../../../Prelude/Bool/even.dhall [ False, True, False ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/even/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/even/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/even/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/even/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/even [ False, True ]
+../../../../../../Prelude/Bool/even.dhall [ False, True ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/even/2A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/even/2A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/even/2A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/even/2A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/even [ False ]
+../../../../../../Prelude/Bool/even.dhall [ False ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/even/3A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/even/3A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/even/3A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/even/3A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/even ([] : List Bool)
+../../../../../../Prelude/Bool/even.dhall ([] : List Bool)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/fold/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/fold/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/fold/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/fold/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/fold True Natural 0 1
+../../../../../../Prelude/Bool/fold.dhall True Natural 0 1
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/fold/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/fold/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/fold/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/fold/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/fold False Natural 0 1
+../../../../../../Prelude/Bool/fold.dhall False Natural 0 1
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/not/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/not/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/not/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/not/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/not True
+../../../../../../Prelude/Bool/not.dhall True
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/not/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/not/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/not/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/not/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/not False
+../../../../../../Prelude/Bool/not.dhall False
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/odd/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/odd/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/odd/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/odd/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/odd [ True, False, True ]
+../../../../../../Prelude/Bool/odd.dhall [ True, False, True ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/odd/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/odd/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/odd/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/odd/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/odd [ True, False ]
+../../../../../../Prelude/Bool/odd.dhall [ True, False ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/odd/2A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/odd/2A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/odd/2A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/odd/2A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/odd [ True ]
+../../../../../../Prelude/Bool/odd.dhall [ True ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/odd/3A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/odd/3A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/odd/3A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/odd/3A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/odd ([] : List Bool)
+../../../../../../Prelude/Bool/odd.dhall ([] : List Bool)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/or/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/or/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/or/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/or/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/or [ True, False, True ]
+../../../../../../Prelude/Bool/or.dhall [ True, False, True ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/or/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/or/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/or/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/or/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/or ([] : List Bool)
+../../../../../../Prelude/Bool/or.dhall ([] : List Bool)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/show/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/show/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/show/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/show/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/show True
+../../../../../../Prelude/Bool/show.dhall True
diff --git a/dhall-lang/tests/type-inference/success/prelude/Bool/show/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Bool/show/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Bool/show/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Bool/show/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Bool/show False
+../../../../../../Prelude/Bool/show.dhall False
diff --git a/dhall-lang/tests/type-inference/success/prelude/Double/show/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Double/show/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Double/show/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Double/show/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Double/show -3.1
+../../../../../../Prelude/Double/show.dhall -3.1
diff --git a/dhall-lang/tests/type-inference/success/prelude/Double/show/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Double/show/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Double/show/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Double/show/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Double/show 0.4
+../../../../../../Prelude/Double/show.dhall 0.4
diff --git a/dhall-lang/tests/type-inference/success/prelude/Integer/show/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Integer/show/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Integer/show/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Integer/show/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Integer/show -3
+../../../../../../Prelude/Integer/show.dhall -3
diff --git a/dhall-lang/tests/type-inference/success/prelude/Integer/show/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Integer/show/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Integer/show/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Integer/show/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Integer/show +0
+../../../../../../Prelude/Integer/show.dhall +0
diff --git a/dhall-lang/tests/type-inference/success/prelude/Integer/toDouble/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Integer/toDouble/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Integer/toDouble/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Integer/toDouble/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Integer/toDouble -3
+../../../../../../Prelude/Integer/toDouble.dhall -3
diff --git a/dhall-lang/tests/type-inference/success/prelude/Integer/toDouble/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Integer/toDouble/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Integer/toDouble/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Integer/toDouble/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Integer/toDouble +2
+../../../../../../Prelude/Integer/toDouble.dhall +2
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/all/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/all/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/all/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/all/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/all Natural Natural/even [ 2, 3, 5 ]
+../../../../../../Prelude/List/all.dhall Natural Natural/even [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/all/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/all/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/all/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/all/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/all Natural Natural/even ([] : List Natural)
+../../../../../../Prelude/List/all.dhall Natural Natural/even ([] : List Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/any/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/any/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/any/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/any/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/any Natural Natural/even [ 2, 3, 5 ]
+../../../../../../Prelude/List/any.dhall Natural Natural/even [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/any/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/any/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/any/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/any/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/any Natural Natural/even ([] : List Natural)
+../../../../../../Prelude/List/any.dhall Natural Natural/even ([] : List Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/build/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/build/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/build/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/build/0A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/List/build
+../../../../../../Prelude/List/build.dhall
 Text
 ( λ(list : Type)
 → λ(cons : Text → list → list)
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/build/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/build/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/build/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/build/1A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/List/build
+../../../../../../Prelude/List/build.dhall
 Text
 ( λ(list : Type)
 → λ(cons : Text → list → list)
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/concat/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/concat/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/concat/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/concat/0A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/List/concat Natural
+../../../../../../Prelude/List/concat.dhall Natural
 [ [ 0, 1, 2 ]
 , [ 3, 4 ]
 , [ 5, 6, 7, 8 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/concat/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/concat/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/concat/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/concat/1A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/List/concat Natural
+../../../../../../Prelude/List/concat.dhall Natural
 [ [] : List Natural
 , [] : List Natural
 , [] : List Natural
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/concatMap/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/concatMap/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/concatMap/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/concatMap/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/concatMap Natural Natural (λ(n : Natural) → [ n, n ]) [ 2, 3, 5 ]
+../../../../../../Prelude/List/concatMap.dhall Natural Natural (λ(n : Natural) → [ n, n ]) [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/concatMap/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/concatMap/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/concatMap/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/concatMap/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/concatMap Natural Natural (λ(n : Natural) → [ n, n ]) ([] : List Natural)
+../../../../../../Prelude/List/concatMap.dhall Natural Natural (λ(n : Natural) → [ n, n ]) ([] : List Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/filter/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/filter/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/filter/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/filter/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/filter Natural Natural/even [ 2, 3, 5 ]
+../../../../../../Prelude/List/filter.dhall Natural Natural/even [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/filter/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/filter/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/filter/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/filter/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/filter Natural Natural/odd [ 2, 3, 5 ]
+../../../../../../Prelude/List/filter.dhall Natural Natural/odd [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/fold/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/fold/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/fold/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/fold/0A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/List/fold
+../../../../../../Prelude/List/fold.dhall
 Natural
 [ 2, 3, 5 ]
 Natural
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/fold/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/fold/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/fold/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/fold/1A.dhall
@@ -1,5 +1,5 @@
   λ(nil : Natural)
-→ ../../../../../../Prelude/List/fold
+→ ../../../../../../Prelude/List/fold.dhall
   Natural
   [ 2, 3, 5 ]
   Natural
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/fold/2A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/fold/2A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/fold/2A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/fold/2A.dhall
@@ -1,4 +1,4 @@
   λ(list : Type)
 → λ(cons : Natural → list → list)
 → λ(nil : list)
-→ ../../../../../../Prelude/List/fold Natural [ 2, 3, 5 ] list cons nil
+→ ../../../../../../Prelude/List/fold.dhall Natural [ 2, 3, 5 ] list cons nil
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/generate/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/generate/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/generate/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/generate/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/generate 5 Bool Natural/even
+../../../../../../Prelude/List/generate.dhall 5 Bool Natural/even
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/generate/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/generate/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/generate/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/generate/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/generate 0 Bool Natural/even
+../../../../../../Prelude/List/generate.dhall 0 Bool Natural/even
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/head/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/head/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/head/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/head/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/head Natural [ 0, 1, 2 ]
+../../../../../../Prelude/List/head.dhall Natural [ 0, 1, 2 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/head/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/head/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/head/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/head/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/head Natural ([] : List Natural)
+../../../../../../Prelude/List/head.dhall Natural ([] : List Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/indexed/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/indexed/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/indexed/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/indexed/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/indexed Bool [ True, False, True ]
+../../../../../../Prelude/List/indexed.dhall Bool [ True, False, True ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/indexed/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/indexed/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/indexed/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/indexed/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/indexed Bool ([] : List Bool)
+../../../../../../Prelude/List/indexed.dhall Bool ([] : List Bool)
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/iterate/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/iterate/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/iterate/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/iterate/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/iterate 10 Natural (λ(x : Natural) → x * 2) 1
+../../../../../../Prelude/List/iterate.dhall 10 Natural (λ(x : Natural) → x * 2) 1
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/iterate/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/iterate/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/iterate/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/iterate/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/iterate 0 Natural (λ(x : Natural) → x * 2) 1
+../../../../../../Prelude/List/iterate.dhall 0 Natural (λ(x : Natural) → x * 2) 1
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/last/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/last/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/last/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/last/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/last Natural [ 0, 1, 2 ]
+../../../../../../Prelude/List/last.dhall Natural [ 0, 1, 2 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/last/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/last/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/last/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/last/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/last Natural ([] : List Natural)
+../../../../../../Prelude/List/last.dhall Natural ([] : List Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/length/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/length/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/length/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/length/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/length Natural [ 0, 1, 2 ]
+../../../../../../Prelude/List/length.dhall Natural [ 0, 1, 2 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/length/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/length/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/length/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/length/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/length Natural ([] : List Natural)
+../../../../../../Prelude/List/length.dhall Natural ([] : List Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/map/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/map/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/map/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/map/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/map Natural Bool Natural/even [ 2, 3, 5 ]
+../../../../../../Prelude/List/map.dhall Natural Bool Natural/even [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/map/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/map/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/map/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/map/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/map Natural Bool Natural/even ([] : List Natural)
+../../../../../../Prelude/List/map.dhall Natural Bool Natural/even ([] : List Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/null/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/null/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/null/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/null/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/null Natural [ 0, 1, 2 ]
+../../../../../../Prelude/List/null.dhall Natural [ 0, 1, 2 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/null/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/null/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/null/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/null/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/null Natural ([] : List Natural)
+../../../../../../Prelude/List/null.dhall Natural ([] : List Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/replicate/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/replicate/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/replicate/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/replicate/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/replicate 9 Natural 1
+../../../../../../Prelude/List/replicate.dhall 9 Natural 1
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/replicate/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/replicate/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/replicate/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/replicate/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/replicate 0 Natural 1
+../../../../../../Prelude/List/replicate.dhall 0 Natural 1
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/reverse/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/reverse/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/reverse/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/reverse/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/reverse Natural [ 0, 1, 2 ]
+../../../../../../Prelude/List/reverse.dhall Natural [ 0, 1, 2 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/reverse/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/reverse/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/reverse/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/reverse/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/reverse Natural ([] : List Natural)
+../../../../../../Prelude/List/reverse.dhall Natural ([] : List Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/shifted/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/shifted/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/shifted/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/shifted/0A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/List/shifted
+../../../../../../Prelude/List/shifted.dhall
 Bool
 [ [ { index = 0, value = True }
   , { index = 1, value = True }
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/shifted/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/shifted/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/shifted/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/shifted/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/shifted Bool ([] : List (List { index : Natural, value : Bool }))
+../../../../../../Prelude/List/shifted.dhall Bool ([] : List (List { index : Natural, value : Bool }))
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/unzip/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/unzip/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/unzip/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/unzip/0A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/List/unzip
+../../../../../../Prelude/List/unzip.dhall
 Text
 Bool
 [ { _1 = "ABC", _2 = True }
diff --git a/dhall-lang/tests/type-inference/success/prelude/List/unzip/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/List/unzip/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/List/unzip/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/List/unzip/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/List/unzip Text Bool ([] : List { _1 : Text, _2 : Bool })
+../../../../../../Prelude/List/unzip.dhall Text Bool ([] : List { _1 : Text, _2 : Bool })
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/build/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/build/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/build/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/build/0A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/Natural/build
+../../../../../../Prelude/Natural/build.dhall
 ( λ(natural : Type)
 → λ(succ : natural → natural)
 → λ(zero : natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/build/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/build/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/build/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/build/1A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/Natural/build
+../../../../../../Prelude/Natural/build.dhall
 ( λ(natural : Type)
 → λ(succ : natural → natural)
 → λ(zero : natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/enumerate/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/enumerate/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/enumerate/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/enumerate/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/enumerate 10
+../../../../../../Prelude/Natural/enumerate.dhall 10
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/enumerate/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/enumerate/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/enumerate/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/enumerate/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/enumerate 0
+../../../../../../Prelude/Natural/enumerate.dhall 0
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/even/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/even/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/even/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/even/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/even 3
+../../../../../../Prelude/Natural/even.dhall 3
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/even/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/even/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/even/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/even/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/even 0
+../../../../../../Prelude/Natural/even.dhall 0
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/fold/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/fold/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/fold/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/fold/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/fold 3 Natural (λ(x : Natural) → 5 * x) 1
+../../../../../../Prelude/Natural/fold.dhall 3 Natural (λ(x : Natural) → 5 * x) 1
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/fold/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/fold/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/fold/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/fold/1A.dhall
@@ -1,1 +1,1 @@
-λ(zero : Natural) → ../../../../../../Prelude/Natural/fold 3 Natural (λ(x : Natural) → 5 * x) zero
+λ(zero : Natural) → ../../../../../../Prelude/Natural/fold.dhall 3 Natural (λ(x : Natural) → 5 * x) zero
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/fold/2A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/fold/2A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/fold/2A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/fold/2A.dhall
@@ -1,4 +1,4 @@
   λ(natural : Type)
 → λ(succ : natural → natural)
 → λ(zero : natural)
-→ ../../../../../../Prelude/Natural/fold 3 natural succ zero
+→ ../../../../../../Prelude/Natural/fold.dhall 3 natural succ zero
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/isZero/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/isZero/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/isZero/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/isZero/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/isZero 2
+../../../../../../Prelude/Natural/isZero.dhall 2
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/isZero/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/isZero/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/isZero/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/isZero/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/isZero 0
+../../../../../../Prelude/Natural/isZero.dhall 0
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/odd/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/odd/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/odd/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/odd/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/odd 3
+../../../../../../Prelude/Natural/odd.dhall 3
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/odd/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/odd/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/odd/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/odd/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/odd 0
+../../../../../../Prelude/Natural/odd.dhall 0
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/product/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/product/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/product/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/product/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/product [ 2, 3, 5 ]
+../../../../../../Prelude/Natural/product.dhall [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/product/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/product/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/product/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/product/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/product ([] : List Natural)
+../../../../../../Prelude/Natural/product.dhall ([] : List Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/show/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/show/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/show/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/show/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/show 3
+../../../../../../Prelude/Natural/show.dhall 3
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/show/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/show/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/show/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/show/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/show 0
+../../../../../../Prelude/Natural/show.dhall 0
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/sum/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/sum/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/sum/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/sum/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/sum [ 2, 3, 5 ]
+../../../../../../Prelude/Natural/sum.dhall [ 2, 3, 5 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/sum/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/sum/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/sum/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/sum/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/sum ([] : List Natural)
+../../../../../../Prelude/Natural/sum.dhall ([] : List Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/toDouble/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/toDouble/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/toDouble/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/toDouble/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/toDouble 3
+../../../../../../Prelude/Natural/toDouble.dhall 3
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/toDouble/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/toDouble/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/toDouble/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/toDouble/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/toDouble 0
+../../../../../../Prelude/Natural/toDouble.dhall 0
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/toInteger/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/toInteger/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/toInteger/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/toInteger/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/toInteger 3
+../../../../../../Prelude/Natural/toInteger.dhall 3
diff --git a/dhall-lang/tests/type-inference/success/prelude/Natural/toInteger/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Natural/toInteger/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Natural/toInteger/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Natural/toInteger/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Natural/toInteger 0
+../../../../../../Prelude/Natural/toInteger.dhall 0
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/all/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/all/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/all/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/all/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/all Natural Natural/even (Some 3)
+../../../../../../Prelude/Optional/all.dhall Natural Natural/even (Some 3)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/all/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/all/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/all/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/all/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/all Natural Natural/even (None Natural)
+../../../../../../Prelude/Optional/all.dhall Natural Natural/even (None Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/any/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/any/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/any/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/any/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/any Natural Natural/even (Some 2)
+../../../../../../Prelude/Optional/any.dhall Natural Natural/even (Some 2)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/any/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/any/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/any/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/any/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/any Natural Natural/even (None Natural)
+../../../../../../Prelude/Optional/any.dhall Natural Natural/even (None Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/build/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/build/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/build/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/build/0A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/Optional/build
+../../../../../../Prelude/Optional/build.dhall
 Natural
 ( λ(optional : Type)
 → λ(some : Natural → optional)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/build/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/build/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/build/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/build/1A.dhall
@@ -1,4 +1,4 @@
-../../../../../../Prelude/Optional/build
+../../../../../../Prelude/Optional/build.dhall
 Natural
 ( λ(optional : Type)
 → λ(some : Natural → optional)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/concat/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/concat/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/concat/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/concat/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/concat Natural (Some (Some 1))
+../../../../../../Prelude/Optional/concat.dhall Natural (Some (Some 1))
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/concat/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/concat/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/concat/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/concat/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/concat Natural (Some (None Natural))
+../../../../../../Prelude/Optional/concat.dhall Natural (Some (None Natural))
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/concat/2A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/concat/2A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/concat/2A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/concat/2A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/concat Natural (None (Optional Natural))
+../../../../../../Prelude/Optional/concat.dhall Natural (None (Optional Natural))
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/filter/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/filter/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/filter/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/filter/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/filter Natural Natural/even (Some 2)
+../../../../../../Prelude/Optional/filter.dhall Natural Natural/even (Some 2)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/filter/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/filter/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/filter/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/filter/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/filter Natural Natural/odd (Some 2)
+../../../../../../Prelude/Optional/filter.dhall Natural Natural/odd (Some 2)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/fold/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/fold/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/fold/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/fold/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/fold Natural (Some 2) Natural (λ(x : Natural) → x) 0
+../../../../../../Prelude/Optional/fold.dhall Natural (Some 2) Natural (λ(x : Natural) → x) 0
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/fold/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/fold/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/fold/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/fold/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/fold Natural (None Natural) Natural (λ(x : Natural) → x) 0
+../../../../../../Prelude/Optional/fold.dhall Natural (None Natural) Natural (λ(x : Natural) → x) 0
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/head/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/head/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/head/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/head/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/head Natural [ None Natural, Some 1, Some 2 ]
+../../../../../../Prelude/Optional/head.dhall Natural [ None Natural, Some 1, Some 2 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/head/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/head/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/head/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/head/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/head Natural [ None Natural, None Natural ]
+../../../../../../Prelude/Optional/head.dhall Natural [ None Natural, None Natural ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/head/2A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/head/2A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/head/2A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/head/2A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/head Natural ([] : List (Optional Natural))
+../../../../../../Prelude/Optional/head.dhall Natural ([] : List (Optional Natural))
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/last/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/last/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/last/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/last/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/last Natural [ None Natural, Some 1, Some 2 ]
+../../../../../../Prelude/Optional/last.dhall Natural [ None Natural, Some 1, Some 2 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/last/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/last/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/last/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/last/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/last Natural [ None Natural, None Natural ]
+../../../../../../Prelude/Optional/last.dhall Natural [ None Natural, None Natural ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/last/2A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/last/2A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/last/2A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/last/2A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/last Natural ([] : List (Optional Natural))
+../../../../../../Prelude/Optional/last.dhall Natural ([] : List (Optional Natural))
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/length/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/length/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/length/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/length/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/length Natural (Some 2)
+../../../../../../Prelude/Optional/length.dhall Natural (Some 2)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/length/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/length/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/length/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/length/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/length Natural (None Natural)
+../../../../../../Prelude/Optional/length.dhall Natural (None Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/map/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/map/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/map/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/map/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/map Natural Bool Natural/even (Some 3)
+../../../../../../Prelude/Optional/map.dhall Natural Bool Natural/even (Some 3)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/map/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/map/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/map/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/map/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/map Natural Bool Natural/even (None Natural)
+../../../../../../Prelude/Optional/map.dhall Natural Bool Natural/even (None Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/null/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/null/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/null/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/null/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/null Natural (Some 2)
+../../../../../../Prelude/Optional/null.dhall Natural (Some 2)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/null/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/null/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/null/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/null/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/null Natural (None Natural)
+../../../../../../Prelude/Optional/null.dhall Natural (None Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/toList/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/toList/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/toList/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/toList/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/toList Natural (Some 1)
+../../../../../../Prelude/Optional/toList.dhall Natural (Some 1)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/toList/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/toList/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/toList/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/toList/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/toList Natural (None Natural)
+../../../../../../Prelude/Optional/toList.dhall Natural (None Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/unzip/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/unzip/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/unzip/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/unzip/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/unzip Text Bool (Some { _1 = "ABC", _2 = True })
+../../../../../../Prelude/Optional/unzip.dhall Text Bool (Some { _1 = "ABC", _2 = True })
diff --git a/dhall-lang/tests/type-inference/success/prelude/Optional/unzip/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Optional/unzip/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Optional/unzip/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Optional/unzip/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Optional/unzip Text Bool (None { _1 : Text, _2 : Bool })
+../../../../../../Prelude/Optional/unzip.dhall Text Bool (None { _1 : Text, _2 : Bool })
diff --git a/dhall-lang/tests/type-inference/success/prelude/Text/concat/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Text/concat/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Text/concat/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Text/concat/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concat [ "ABC", "DEF", "GHI" ]
+../../../../../../Prelude/Text/concat.dhall [ "ABC", "DEF", "GHI" ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Text/concat/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Text/concat/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Text/concat/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Text/concat/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concat ([] : List Text)
+../../../../../../Prelude/Text/concat.dhall ([] : List Text)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Text/concatMap/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Text/concatMap/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Text/concatMap/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Text/concatMap/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concatMap Natural (λ(n : Natural) → "${Natural/show n} ") [ 0, 1, 2 ]
+../../../../../../Prelude/Text/concatMap.dhall Natural (λ(n : Natural) → "${Natural/show n} ") [ 0, 1, 2 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Text/concatMap/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Text/concatMap/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Text/concatMap/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Text/concatMap/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concatMap Natural (λ(n : Natural) → "${Natural/show n} ") ([] : List Natural)
+../../../../../../Prelude/Text/concatMap.dhall Natural (λ(n : Natural) → "${Natural/show n} ") ([] : List Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Text/concatMapSep/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Text/concatMapSep/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Text/concatMapSep/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Text/concatMapSep/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concatMapSep ", " Natural Natural/show [ 0, 1, 2 ]
+../../../../../../Prelude/Text/concatMapSep.dhall ", " Natural Natural/show [ 0, 1, 2 ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Text/concatMapSep/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Text/concatMapSep/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Text/concatMapSep/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Text/concatMapSep/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concatMapSep ", " Natural Natural/show ([] : List Natural)
+../../../../../../Prelude/Text/concatMapSep.dhall ", " Natural Natural/show ([] : List Natural)
diff --git a/dhall-lang/tests/type-inference/success/prelude/Text/concatSep/0A.dhall b/dhall-lang/tests/type-inference/success/prelude/Text/concatSep/0A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Text/concatSep/0A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Text/concatSep/0A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concatSep ", " [ "ABC", "DEF", "GHI" ]
+../../../../../../Prelude/Text/concatSep.dhall ", " [ "ABC", "DEF", "GHI" ]
diff --git a/dhall-lang/tests/type-inference/success/prelude/Text/concatSep/1A.dhall b/dhall-lang/tests/type-inference/success/prelude/Text/concatSep/1A.dhall
--- a/dhall-lang/tests/type-inference/success/prelude/Text/concatSep/1A.dhall
+++ b/dhall-lang/tests/type-inference/success/prelude/Text/concatSep/1A.dhall
@@ -1,1 +1,1 @@
-../../../../../../Prelude/Text/concatSep ", " ([] : List Text)
+../../../../../../Prelude/Text/concatSep.dhall ", " ([] : List Text)
diff --git a/dhall-lang/tests/type-inference/success/preludeB.dhall b/dhall-lang/tests/type-inference/success/preludeB.dhall
--- a/dhall-lang/tests/type-inference/success/preludeB.dhall
+++ b/dhall-lang/tests/type-inference/success/preludeB.dhall
@@ -431,6 +431,92 @@
     , toDouble : ∀(n : Natural) → Double
     , toInteger : Natural → Integer
     }
+, NonEmpty :
+    { Type : ∀(a : Type) → Type
+    , all :
+        ∀(a : Type) →
+        ∀(f : a → Bool) →
+        ∀(xs : { head : a, tail : List a }) →
+          Bool
+    , any :
+        ∀(a : Type) →
+        ∀(f : a → Bool) →
+        ∀(xs : { head : a, tail : List a }) →
+          Bool
+    , concat :
+        ∀(a : Type) →
+        ∀ ( xss
+          : { head : { head : a, tail : List a }
+            , tail : List { head : a, tail : List a }
+            }
+          ) →
+          { head : a, tail : List a }
+    , concatMap :
+        ∀(a : Type) →
+        ∀(b : Type) →
+        ∀(f : a → { head : b, tail : List b }) →
+        ∀(xs : { head : a, tail : List a }) →
+          { head : b, tail : List b }
+    , head : ∀(a : Type) → ∀(xs : { head : a, tail : List a }) → a
+    , index :
+        ∀(n : Natural) →
+        ∀(a : Type) →
+        ∀(xs : { head : a, tail : List a }) →
+          Optional a
+    , indexed :
+        ∀(a : Type) →
+        ∀(xs : { head : a, tail : List a }) →
+          { head : { index : Natural, value : a }
+          , tail : List { index : Natural, value : a }
+          }
+    , last : ∀(a : Type) → ∀(xs : { head : a, tail : List a }) → a
+    , length : ∀(a : Type) → ∀(xs : { head : a, tail : List a }) → Natural
+    , make :
+        ∀(a : Type) →
+        ∀(head : a) →
+        ∀(tail : List a) →
+          { head : a, tail : List a }
+    , map :
+        ∀(a : Type) →
+        ∀(b : Type) →
+        ∀(f : a → b) →
+        ∀(xs : { head : a, tail : List a }) →
+          { head : b, tail : List b }
+    , reverse :
+        ∀(a : Type) →
+        ∀(xs : { head : a, tail : List a }) →
+          { head : a, tail : List a }
+    , shifted :
+        ∀(a : Type) →
+        ∀ ( kvss
+          : { head :
+                { head : { index : Natural, value : a }
+                , tail : List { index : Natural, value : a }
+                }
+            , tail :
+                List
+                  { head : { index : Natural, value : a }
+                  , tail : List { index : Natural, value : a }
+                  }
+            }
+          ) →
+          { head : { index : Natural, value : a }
+          , tail : List { index : Natural, value : a }
+          }
+    , singleton : ∀(a : Type) → ∀(x : a) → { head : a, tail : List a }
+    , toList : ∀(a : Type) → ∀(xs : { head : a, tail : List a }) → List a
+    , unzip :
+        ∀(a : Type) →
+        ∀(b : Type) →
+        ∀(xs : { head : { _1 : a, _2 : b }, tail : List { _1 : a, _2 : b } }) →
+          { _1 : { head : a, tail : List a }, _2 : { head : b, tail : List b } }
+    , zip :
+        ∀(a : Type) →
+        ∀(xs : { head : a, tail : List a }) →
+        ∀(b : Type) →
+        ∀(ys : { head : b, tail : List b }) →
+          { head : { _1 : a, _2 : b }, tail : List { _1 : a, _2 : b } }
+    }
 , Operator :
     { `!=` : ∀(m : Bool) → ∀(n : Bool) → Bool
     , `#` : ∀(type : Type) → ∀(m : List type) → ∀(n : List type) → List type
diff --git a/dhall-lang/tests/type-inference/success/unit/MergeOneWithAnnotation1A.dhall b/dhall-lang/tests/type-inference/success/unit/MergeOneWithAnnotation1A.dhall
--- a/dhall-lang/tests/type-inference/success/unit/MergeOneWithAnnotation1A.dhall
+++ b/dhall-lang/tests/type-inference/success/unit/MergeOneWithAnnotation1A.dhall
@@ -1,1 +1,1 @@
-merge { x = λ(y : Bool) → y } < x >.x : (Bool → Bool)
+merge { x = λ(y : Bool) → y } < x >.x : (∀(y : Bool) → Bool)
diff --git a/dhall-lang/tests/type-inference/success/unit/ToMapInferTypeFromRecordA.dhall b/dhall-lang/tests/type-inference/success/unit/ToMapInferTypeFromRecordA.dhall
--- a/dhall-lang/tests/type-inference/success/unit/ToMapInferTypeFromRecordA.dhall
+++ b/dhall-lang/tests/type-inference/success/unit/ToMapInferTypeFromRecordA.dhall
@@ -1,1 +1,1 @@
-toMap { x = λ(x : Bool) → x } : List { mapKey : Text, mapValue : Bool → Bool }
+toMap { x = λ(x : Bool) → x } : List { mapKey : Text, mapValue : ∀(x : Bool) → Bool }
diff --git a/dhall-lang/tests/type-inference/success/unit/TypeAnnotationFunctionA.dhall b/dhall-lang/tests/type-inference/success/unit/TypeAnnotationFunctionA.dhall
--- a/dhall-lang/tests/type-inference/success/unit/TypeAnnotationFunctionA.dhall
+++ b/dhall-lang/tests/type-inference/success/unit/TypeAnnotationFunctionA.dhall
@@ -1,1 +1,1 @@
-(λ(x : Bool) → x) : Bool → Bool
+(λ(x : Bool) → x) : ∀(x : Bool) → Bool
diff --git a/dhall.cabal b/dhall.cabal
--- a/dhall.cabal
+++ b/dhall.cabal
@@ -1,8 +1,7 @@
 Name: dhall
-Version: 1.39.0
+Version: 1.40.0
 Cabal-Version: 2.0
 Build-Type: Simple
-Tested-With: GHC == 8.4.3, GHC == 8.6.1
 License: BSD3
 License-File: LICENSE
 Copyright: 2017 Gabriel Gonzalez
@@ -159,6 +158,7 @@
     dhall-lang/Prelude/Natural/toDouble
     dhall-lang/Prelude/Natural/toInteger
     dhall-lang/Prelude/Natural/*.dhall
+    dhall-lang/Prelude/NonEmpty/*.dhall
     dhall-lang/Prelude/Operator/package.dhall
     dhall-lang/Prelude/Optional/all
     dhall-lang/Prelude/Optional/any
@@ -495,9 +495,9 @@
         haskeline                   >= 0.7.2.1  && < 0.9 ,
         hashable                    >= 1.2      && < 1.4 ,
         lens-family-core            >= 1.0.0    && < 2.2 ,
-        megaparsec                  >= 7        && < 9.1 ,
+        megaparsec                  >= 7        && < 9.2 ,
         memory                      >= 0.14     && < 0.17,
-        mmorph                                     < 1.2 ,
+        mmorph                                     < 1.3 ,
         mtl                         >= 2.2.1    && < 2.3 ,
         network-uri                 >= 2.6      && < 2.7 ,
         optparse-applicative        >= 0.14.0.0 && < 0.17,
@@ -514,8 +514,8 @@
         text                        >= 0.11.1.0 && < 1.3 ,
         text-manipulate             >= 0.2.0.1  && < 0.4 ,
         th-lift-instances           >= 0.1.13   && < 0.2 ,
-        transformers                >= 0.2.0.0  && < 0.6 ,
-        transformers-compat         >= 0.6.2    && < 0.7 ,
+        time                        >= 1.1.4    && < 1.13,
+        transformers                >= 0.5.2.0  && < 0.6 ,
         unordered-containers        >= 0.1.3.0  && < 0.3 ,
         uri-encode                                 < 1.6 ,
         vector                      >= 0.11.0.0 && < 0.13
@@ -670,7 +670,7 @@
         either                                         ,
         filepath                                       ,
         foldl                                    < 1.5 ,
-        generic-random            >= 1.3.0.0  && < 1.5 ,
+        generic-random            >= 1.3.0.0  && < 1.6 ,
         http-client                                    ,
         http-client-tls                                ,
         lens-family-core                               ,
@@ -688,7 +688,9 @@
         tasty-quickcheck          >= 0.9.2    && < 0.11,
         tasty-silver                             < 3.3 ,
         template-haskell                               ,
+        temporary                 >= 1.2.1    && < 1.4 ,
         text                      >= 0.11.1.0 && < 1.3 ,
+        time                                           ,
         transformers                                   ,
         turtle                                   < 1.6 ,
         unordered-containers                           ,
@@ -709,6 +711,9 @@
         filepath                < 1.5 ,
         mockery                 < 0.4 ,
         doctest   >= 0.7.0   && < 0.19
+    if os(windows)
+      -- https://github.com/dhall-lang/dhall-haskell/issues/2237
+      Buildable: False
     Default-Language: Haskell2010
 
 Benchmark dhall-parser
diff --git a/src/Dhall/Binary.hs b/src/Dhall/Binary.hs
--- a/src/Dhall/Binary.hs
+++ b/src/Dhall/Binary.hs
@@ -50,9 +50,11 @@
     )
 
 import Data.Foldable (toList)
+import Data.Ratio    ((%))
 import Data.Void     (Void, absurd)
 import GHC.Float     (double2Float, float2Double)
 import Numeric.Half  (fromHalf, toHalf)
+import Prelude hiding (exponent)
 
 import qualified Codec.CBOR.ByteArray
 import qualified Codec.CBOR.Decoding   as Decoding
@@ -66,6 +68,7 @@
 import qualified Data.Foldable         as Foldable
 import qualified Data.List.NonEmpty    as NonEmpty
 import qualified Data.Sequence
+import qualified Data.Time             as Time
 import qualified Dhall.Crypto
 import qualified Dhall.Map
 import qualified Dhall.Syntax          as Syntax
@@ -133,9 +136,11 @@
 
                 case Data.ByteString.Short.length sb of
                     4  | sb == "Bool"              -> return Bool
+                       | sb == "Date"              -> return Date
                        | sb == "List"              -> return List
                        | sb == "None"              -> return None
                        | sb == "Text"              -> return Text
+                       | sb == "Time"              -> return Time
                        | sb == "Type"              -> return (Const Type)
                        | sb == "Kind"              -> return (Const Kind)
                        | sb == "Sort"              -> return (Const Sort)
@@ -143,6 +148,7 @@
                     7  | sb == "Integer"           -> return Integer
                        | sb == "Natural"           -> return Natural
                     8  | sb == "Optional"          -> return Optional
+                       | sb == "TimeZone"          -> return TimeZone
                     9  | sb == "List/fold"         -> return ListFold
                        | sb == "List/head"         -> return ListHead
                        | sb == "List/last"         -> return ListLast
@@ -566,6 +572,73 @@
 
                                 return (With l ks₁ r)
 
+                            30 -> do
+                                _YYYY <- Decoding.decodeInt
+                                _MM   <- Decoding.decodeInt
+                                _HH   <- Decoding.decodeInt
+
+                                case Time.fromGregorianValid (fromIntegral _YYYY) _MM _HH of
+                                    Nothing ->
+                                        die "Invalid date"
+                                    Just day ->
+                                        return (DateLiteral day)
+                            31 -> do
+                                hh <- Decoding.decodeInt
+                                mm <- Decoding.decodeInt
+                                tag₂ <- Decoding.decodeTag
+
+                                case tag₂ of
+                                    4 -> do
+                                        return ()
+                                    _ -> do
+                                        die ("Unexpected tag for decimal fraction: " <> show tag)
+                                n <- Decoding.decodeListLen
+
+                                case n of
+                                    2 -> do
+                                        return ()
+                                    _ -> do
+                                        die ("Invalid list length for decimal fraction: " <> show n)
+
+                                exponent <- Decoding.decodeInt
+
+                                tokenType₂ <- Decoding.peekTokenType
+
+                                mantissa <- case tokenType₂ of
+                                    TypeUInt -> do
+                                        fromIntegral <$> Decoding.decodeWord
+
+                                    TypeUInt64 -> do
+                                        fromIntegral <$> Decoding.decodeWord64
+
+                                    TypeNInt -> do
+                                        !i <- fromIntegral <$> Decoding.decodeNegWord
+
+                                        return (-1 - i)
+
+                                    TypeNInt64 -> do
+                                        !i <- fromIntegral <$> Decoding.decodeNegWord64
+
+                                        return (-1 - i)
+                                    TypeInteger -> do
+                                        Decoding.decodeInteger
+                                    _ ->
+                                        die ("Unexpected token type for mantissa: " <> show tokenType₂)
+                                let precision = fromIntegral (negate exponent)
+
+                                let ss = fromRational (mantissa % (10 ^ precision))
+
+                                return (TimeLiteral (Time.TimeOfDay hh mm ss) precision)
+                            32 -> do
+                                b   <- Decoding.decodeBool
+                                _HH <- Decoding.decodeInt
+                                _MM <- Decoding.decodeInt
+
+                                let sign = if b then id else negate
+
+                                let minutes = sign (_HH * 60 + _MM)
+
+                                return (TimeZoneLiteral (Time.TimeZone minutes False ""))
                             _ ->
                                 die ("Unexpected tag: " <> show tag)
 
@@ -674,6 +747,15 @@
         TextShow ->
             Encoding.encodeUtf8ByteArray "Text/show"
 
+        Date ->
+            Encoding.encodeUtf8ByteArray "Date"
+
+        Time ->
+            Encoding.encodeUtf8ByteArray "Time"
+
+        TimeZone ->
+            Encoding.encodeUtf8ByteArray "TimeZone"
+
         List ->
             Encoding.encodeUtf8ByteArray "List"
 
@@ -935,6 +1017,49 @@
                 (go l)
                 (encodeList (fmap Encoding.encodeString ks))
                 (go r)
+
+        DateLiteral day ->
+            encodeList4
+                (Encoding.encodeInt 30)
+                (Encoding.encodeInt (fromInteger _YYYY))
+                (Encoding.encodeInt _MM)
+                (Encoding.encodeInt _DD)
+          where
+            (_YYYY, _MM, _DD) = Time.toGregorian day
+
+        TimeLiteral (Time.TimeOfDay hh mm ss) precision ->
+            encodeList4
+                (Encoding.encodeInt 31)
+                (Encoding.encodeInt hh)
+                (Encoding.encodeInt mm)
+                (   Encoding.encodeTag 4
+                <>  encodeList2
+                        (Encoding.encodeInt exponent)
+                        encodedMantissa
+                )
+          where
+            exponent = negate (fromIntegral precision)
+
+            mantissa :: Integer
+            mantissa = truncate (ss * 10 ^ precision)
+
+            encodedMantissa
+                |  fromIntegral (minBound :: Int) <= mantissa
+                && mantissa <= fromIntegral (maxBound :: Int) =
+                    Encoding.encodeInt (fromInteger mantissa)
+                | otherwise =
+                    Encoding.encodeInteger mantissa
+
+        TimeZoneLiteral (Time.TimeZone minutes _ _) ->
+            encodeList4
+                (Encoding.encodeInt 32)
+                (Encoding.encodeBool sign)
+                (Encoding.encodeInt _HH)
+                (Encoding.encodeInt _MM)
+          where
+            sign = 0 <= minutes
+
+            (_HH, _MM) = abs minutes `divMod` 60
 
         Note _ b ->
             go b
diff --git a/src/Dhall/Diff.hs b/src/Dhall/Diff.hs
--- a/src/Dhall/Diff.hs
+++ b/src/Dhall/Diff.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE RecordWildCards   #-}
 {-# LANGUAGE ViewPatterns      #-}
+{-# LANGUAGE TypeApplications  #-}
 
 {-| This module provides functionality for concisely displaying the difference
     between two expressions
@@ -43,6 +44,7 @@
 import qualified Data.Set
 import qualified Data.Text
 import qualified Data.Text.Prettyprint.Doc as Pretty
+import qualified Data.Time                 as Time
 import qualified Dhall.Map
 import qualified Dhall.Normalize           as Normalize
 import qualified Dhall.Pretty.Internal     as Internal
@@ -194,6 +196,22 @@
 diffDouble :: DhallDouble -> DhallDouble -> Diff
 diffDouble = diffPrimitive (token . Internal.prettyDouble . getDhallDouble)
 
+diffDateLiteral :: Time.Day -> Time.Day -> Diff
+diffDateLiteral =
+    diffPrimitive (token . Internal.prettyExpr @(Expr Void Void) . DateLiteral)
+
+diffTimeLiteral :: Time.TimeOfDay -> Word -> Time.TimeOfDay -> Word -> Diff
+diffTimeLiteral tL pL tR pR =
+    diffPrimitive
+        (token . Internal.prettyExpr @(Expr Void Void) . uncurry TimeLiteral)
+        (tL, pL)
+        (tR, pR)
+
+diffTimeZoneLiteral :: Time.TimeZone -> Time.TimeZone -> Diff
+diffTimeZoneLiteral =
+    diffPrimitive
+        (token . Internal.prettyExpr @(Expr Void Void) . TimeZoneLiteral)
+
 diffConst :: Const -> Const -> Diff
 diffConst = diffPrimitive (token . Internal.prettyConst)
 
@@ -1248,6 +1266,24 @@
     mismatch l r
 diffPrimitiveExpression l r@TextShow =
     mismatch l r
+diffPrimitiveExpression Date Date =
+    "…"
+diffPrimitiveExpression l r@Date =
+    mismatch l r
+diffPrimitiveExpression l@Date r=
+    mismatch l r
+diffPrimitiveExpression Time Time =
+    "…"
+diffPrimitiveExpression l r@Time =
+    mismatch l r
+diffPrimitiveExpression l@Time r=
+    mismatch l r
+diffPrimitiveExpression TimeZone TimeZone =
+    "…"
+diffPrimitiveExpression l r@TimeZone =
+    mismatch l r
+diffPrimitiveExpression l@TimeZone r=
+    mismatch l r
 diffPrimitiveExpression List List =
     "…"
 diffPrimitiveExpression l@List r =
@@ -1340,6 +1376,24 @@
 diffPrimitiveExpression l@(TextLit {}) r =
     mismatch l r
 diffPrimitiveExpression l r@(TextLit {}) =
+    mismatch l r
+diffPrimitiveExpression (DateLiteral l) (DateLiteral r) =
+    diffDateLiteral l r
+diffPrimitiveExpression l@(DateLiteral {}) r =
+    mismatch l r
+diffPrimitiveExpression l r@(DateLiteral {}) =
+    mismatch l r
+diffPrimitiveExpression (TimeLiteral tL pL) (TimeLiteral tR pR) =
+    diffTimeLiteral tL pL tR pR
+diffPrimitiveExpression l@(TimeLiteral {}) r =
+    mismatch l r
+diffPrimitiveExpression l r@(TimeLiteral {}) =
+    mismatch l r
+diffPrimitiveExpression (TimeZoneLiteral l) (TimeZoneLiteral r) =
+    diffTimeZoneLiteral l r
+diffPrimitiveExpression l@(TimeZoneLiteral {}) r =
+    mismatch l r
+diffPrimitiveExpression l r@(TimeZoneLiteral {}) =
     mismatch l r
 diffPrimitiveExpression (Record aL) (Record aR) =
     diffRecord aL aR
diff --git a/src/Dhall/Eval.hs b/src/Dhall/Eval.hs
--- a/src/Dhall/Eval.hs
+++ b/src/Dhall/Eval.hs
@@ -77,6 +77,7 @@
 import qualified Data.Sequence as Sequence
 import qualified Data.Set
 import qualified Data.Text     as Text
+import qualified Data.Time     as Time
 import qualified Dhall.Map     as Map
 import qualified Dhall.Set
 import qualified Dhall.Syntax  as Syntax
@@ -200,6 +201,13 @@
     | VTextShow !(Val a)
     | VTextReplace !(Val a) !(Val a) !(Val a)
 
+    | VDate
+    | VDateLiteral Time.Day
+    | VTime
+    | VTimeLiteral Time.TimeOfDay Word
+    | VTimeZone
+    | VTimeZoneLiteral Time.TimeZone
+
     | VList !(Val a)
     | VListLit !(Maybe (Val a)) !(Seq (Val a))
     | VListAppend !(Val a) !(Val a)
@@ -644,6 +652,18 @@
                                     VTextReplace needle replacement haystack
                         _ ->
                             VTextReplace needle replacement haystack
+        Date ->
+            VDate
+        DateLiteral d ->
+            VDateLiteral d
+        Time ->
+            VTime
+        TimeLiteral t p ->
+            VTimeLiteral t p
+        TimeZone ->
+            VTimeZone
+        TimeZoneLiteral z ->
+            VTimeZoneLiteral z
         List ->
             VPrim VList
         ListLit ma ts ->
@@ -1159,6 +1179,18 @@
             TextShow `qApp` t
         VTextReplace a b c ->
             TextReplace `qApp` a `qApp` b `qApp` c
+        VDate ->
+            Date
+        VDateLiteral d ->
+            DateLiteral d
+        VTime ->
+            Time
+        VTimeLiteral t p ->
+            TimeLiteral t p
+        VTimeZone ->
+            TimeZone
+        VTimeZoneLiteral z ->
+            TimeZoneLiteral z
         VList t ->
             List `qApp` t
         VListLit ma ts ->
@@ -1344,6 +1376,18 @@
                 TextShow
             TextReplace ->
                 TextReplace
+            Date ->
+                Date
+            DateLiteral d ->
+                DateLiteral d
+            Time ->
+                Time
+            TimeLiteral t p ->
+                TimeLiteral t p
+            TimeZone ->
+                TimeZone
+            TimeZoneLiteral z ->
+                TimeZoneLiteral z
             List ->
                 List
             ListLit ma ts ->
diff --git a/src/Dhall/Import.hs b/src/Dhall/Import.hs
--- a/src/Dhall/Import.hs
+++ b/src/Dhall/Import.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE AllowAmbiguousTypes #-}
 {-# LANGUAGE CPP                 #-}
 {-# LANGUAGE DeriveAnyClass      #-}
 {-# LANGUAGE DeriveDataTypeable  #-}
@@ -7,6 +8,7 @@
 {-# LANGUAGE RankNTypes          #-}
 {-# LANGUAGE RecordWildCards     #-}
 {-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE TypeApplications    #-}
 {-# LANGUAGE ViewPatterns        #-}
 
 {-# OPTIONS_GHC -Wall #-}
@@ -167,6 +169,7 @@
 import Data.Text                        (Text)
 import Data.Typeable                    (Typeable)
 import Data.Void                        (Void, absurd)
+import Dhall.TypeCheck                  (TypeError)
 
 import Dhall.Syntax
     ( Chunks (..)
@@ -201,6 +204,7 @@
 
 import qualified Codec.CBOR.Write                            as Write
 import qualified Codec.Serialise
+import qualified Control.Exception                           as Exception
 import qualified Control.Monad.State.Strict                  as State
 import qualified Control.Monad.Trans.Maybe                   as Maybe
 import qualified Data.ByteString
@@ -208,6 +212,7 @@
 import qualified Data.CaseInsensitive
 import qualified Data.Foldable
 import qualified Data.List.NonEmpty                          as NonEmpty
+import qualified Data.Maybe                                  as Maybe
 import qualified Data.Text                                   as Text
 import qualified Data.Text.Encoding
 import qualified Data.Text.IO
@@ -1157,11 +1162,29 @@
 
   ImportAlt a b -> loadWith a `catch` handler₀
     where
-      handler₀ (SourcedException (Src begin _ text₀) (MissingImports es₀)) =
-          loadWith b `catch` handler₁
+      is :: forall e . Exception e => SomeException -> Bool
+      is exception = Maybe.isJust (Exception.fromException @e exception)
+
+      isNotResolutionError exception =
+              is @(Imported (TypeError Src Void)) exception
+          ||  is @(Imported  Cycle              ) exception
+          ||  is @(Imported  HashMismatch       ) exception
+          ||  is @(Imported  ParseError         ) exception
+
+      handler₀ exception₀@(SourcedException (Src begin _ text₀) (MissingImports es₀))
+          | any isNotResolutionError es₀ =
+              throwM exception₀
+          | otherwise = do
+              loadWith b `catch` handler₁
         where
-          handler₁ (SourcedException (Src _ end text₁) (MissingImports es₁)) =
-              throwM (SourcedException (Src begin end text₂) (MissingImports (es₀ ++ es₁)))
+          handler₁ exception₁@(SourcedException (Src _ end text₁) (MissingImports es₁))
+              | any isNotResolutionError es₁ =
+                  throwM exception₁
+              | otherwise =
+                  -- Fix the source span for the error message to encompass both
+                  -- alternatives, since both are equally to blame for the
+                  -- failure if neither succeeds.
+                  throwM (SourcedException (Src begin end text₂) (MissingImports (es₀ ++ es₁)))
             where
               text₂ = text₀ <> " ? " <> text₁
 
diff --git a/src/Dhall/Lint.hs b/src/Dhall/Lint.hs
--- a/src/Dhall/Lint.hs
+++ b/src/Dhall/Lint.hs
@@ -19,6 +19,7 @@
     ) where
 
 import Control.Applicative ((<|>))
+import Data.List.NonEmpty (NonEmpty(..))
 
 import Dhall.Syntax
     ( Binding (..)
@@ -37,9 +38,10 @@
 
 import qualified Data.Foldable      as Foldable
 import qualified Data.List.NonEmpty as NonEmpty
+import qualified Data.Map           as Map
 import qualified Data.Text          as Text
 import qualified Dhall.Core         as Core
-import qualified Dhall.Map          as Map
+import qualified Dhall.Map
 import qualified Dhall.Optics
 import qualified Lens.Family
 
@@ -52,7 +54,7 @@
     * consolidates nested @let@ bindings to use a multiple-@let@ binding with 'removeLetInLet'
     * fixes paths of the form @.\/..\/foo@ to @..\/foo@
 -}
-lint :: Expr s Import -> Expr s Import
+lint :: Eq s => Expr s Import -> Expr s Import
 lint =  Dhall.Optics.rewriteOf subExpressions rewrite
   where
     rewrite e =
@@ -61,6 +63,7 @@
         <|> fixParentPath            e
         <|> removeLetInLet           e
         <|> addPreludeExtensions     e
+        <|> sortImports              e
 
 -- | Remove unused `Let` bindings.
 removeUnusedBindings :: Eq a => Expr s a -> Maybe (Expr s a)
@@ -176,7 +179,7 @@
             (Core.shallowDenote -> App
                 (Core.shallowDenote -> List)
                 (Core.shallowDenote -> Record
-                    (Map.sort ->
+                    (Dhall.Map.sort ->
                         [ ("mapKey", Core.shallowDenote . Core.recordFieldValue -> Text)
                         , ("mapValue", _)
                         ]
@@ -192,14 +195,14 @@
     , Just keyValues' <- traverse convert keyValues =
         Just
             (ToMap
-                (RecordLit (Map.fromList (Foldable.toList keyValues')))
+                (RecordLit (Dhall.Map.fromList (Foldable.toList keyValues')))
                 Nothing
             )
   where
     convert keyValue =
         case Core.shallowDenote keyValue of
             RecordLit
-                (Map.sort ->
+                (Dhall.Map.sort ->
                     [ ("mapKey"  , Core.shallowDenote . Core.recordFieldValue -> TextLit (Chunks [] key))
                     , ("mapValue", value)
                     ]
@@ -209,3 +212,53 @@
                 Nothing
 useToMap _ =
     Nothing
+
+-- | This sorts `let` bindings to move imports to the front if doing so does not
+-- change the behavior of the code.
+sortImports :: Eq s => Expr s Import -> Maybe (Expr s Import)
+sortImports oldExpression@(Let binding0 oldBody0)
+    | oldExpression == newExpression = Nothing
+    | otherwise                      = Just newExpression
+  where
+    toBool (Embed _ ) = False
+    toBool (Note _ e) = toBool e
+    toBool  _         = True
+
+    process (seen, index) Binding{..} oldBody function = (pair, pairs, newBody)
+      where
+        order =
+            if b then index else Map.findWithDefault (0 :: Int) variable seen
+
+        b = toBool value
+
+        pair = (order, function)
+
+        ~(pairs, newBody) =
+            label (Map.insert variable order seen, index + 1) oldBody
+
+    label state (Let binding oldBody) = (pair : pairs, newBody)
+      where
+        function = Let binding
+
+        ~(pair, pairs, newBody) = process state binding oldBody function
+
+    label state (Note src (Let binding oldBody)) = (pair : pairs, newBody)
+      where
+        function e = Note src (Let binding e)
+
+        ~(pair, pairs, newBody) = process state binding oldBody function
+
+    label _ body =
+        ([], body)
+
+    ~(pairs0, newBody0) = (pair :| pairs, newBody)
+      where
+        function = Let binding0
+
+        ~(pair, pairs, newBody) =
+            process (Map.empty, 1) binding0 oldBody0 function
+
+    sortedFunctions = fmap snd (NonEmpty.sortWith fst pairs0)
+
+    newExpression = foldr id newBody0 sortedFunctions
+sortImports _ = Nothing
diff --git a/src/Dhall/Map.hs b/src/Dhall/Map.hs
--- a/src/Dhall/Map.hs
+++ b/src/Dhall/Map.hs
@@ -33,6 +33,7 @@
       -- * Deletion/Update
     , delete
     , filter
+    , partition
     , restrictKeys
     , withoutKeys
     , mapMaybe
@@ -356,6 +357,21 @@
     ks' = filterKeys (\k -> Data.Map.member k m') ks
 {-# INLINABLE filter #-}
 
+{-| Split the map into values that do and don't satisfy the predicate
+
+>>> partition even (fromList [("C",3),("B",2),("A",1)])
+(fromList [("B",2)],fromList [("C",3),("A",1)])
+>>> partition odd (fromList [("C",3),("B",2),("A",1)])
+(fromList [("C",3),("A",1)],fromList [("B",2)])
+-}
+partition :: Ord k => (a -> Bool) -> Map k a -> (Map k a, Map k a)
+partition predicate (Map m ks) = (Map mpass kpass, Map mfail kfail)
+  where
+    (mpass, mfail) = Data.Map.partition predicate m
+
+    (kpass, kfail) = partitionKeys (\k -> Data.Map.member k mpass) ks
+{-# INLINABLE partition #-}
+
 {-| Restrict a 'Map' to only those keys found in a @"Data.Set".'Data.Set.Set'@.
 
 >>> restrictKeys (fromList [("A",1),("B",2)]) (Data.Set.fromList ["A"])
@@ -692,6 +708,13 @@
 filterKeys _ Sorted        = Sorted
 filterKeys f (Original ks) = Original (Prelude.filter f ks)
 {-# INLINABLE filterKeys #-}
+
+partitionKeys :: (a -> Bool) -> Keys a -> (Keys a, Keys a)
+partitionKeys _ Sorted        = (Sorted, Sorted)
+partitionKeys f (Original ks) =
+    let (kpass, kfail) = Data.List.partition f ks
+    in (Original kpass, Original kfail)
+{-# INLINABLE partitionKeys #-}
 
 {- $setup
 >>> import Test.QuickCheck (Arbitrary(..), oneof)
diff --git a/src/Dhall/Marshal/Decode.hs b/src/Dhall/Marshal/Decode.hs
--- a/src/Dhall/Marshal/Decode.hs
+++ b/src/Dhall/Marshal/Decode.hs
@@ -2,6 +2,7 @@
 {-# LANGUAGE ConstraintKinds            #-}
 {-# LANGUAGE DefaultSignatures          #-}
 {-# LANGUAGE DeriveFunctor              #-}
+{-# LANGUAGE DerivingStrategies         #-}
 {-# LANGUAGE FlexibleContexts           #-}
 {-# LANGUAGE FlexibleInstances          #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
@@ -12,6 +13,7 @@
 {-# LANGUAGE RankNTypes                 #-}
 {-# LANGUAGE RecordWildCards            #-}
 {-# LANGUAGE ScopedTypeVariables        #-}
+{-# LANGUAGE StandaloneDeriving         #-}
 {-# LANGUAGE TupleSections              #-}
 {-# LANGUAGE TypeApplications           #-}
 {-# LANGUAGE TypeFamilies               #-}
@@ -130,6 +132,7 @@
     , eitherToValidation
     , validationToEither
     )
+import Data.Functor.Contravariant       (Op(..), Predicate(..), Equivalence(..))
 import Data.Hashable                    (Hashable)
 import Data.Int                         (Int16, Int32, Int64, Int8)
 import Data.List.NonEmpty               (NonEmpty (..))
@@ -337,6 +340,12 @@
         extract expr = typeError expected expr
 
         expected = pure "result"
+
+deriving newtype instance (ToDhall x) => FromDhall (Predicate x)
+
+deriving newtype instance (ToDhall x) => FromDhall (Equivalence x)
+
+deriving newtype instance (FromDhall b, ToDhall x) => FromDhall (Op b x)
 
 -- | You can use this instance to marshal recursive types from Dhall to Haskell.
 --
diff --git a/src/Dhall/Normalize.hs b/src/Dhall/Normalize.hs
--- a/src/Dhall/Normalize.hs
+++ b/src/Dhall/Normalize.hs
@@ -480,6 +480,12 @@
     TextAppend x y -> loop (TextLit (Chunks [("", x), ("", y)] ""))
     TextReplace -> pure TextReplace
     TextShow -> pure TextShow
+    Date -> pure Date
+    DateLiteral d -> pure (DateLiteral d)
+    Time -> pure Time
+    TimeLiteral t p -> pure (TimeLiteral t p)
+    TimeZone -> pure TimeZone
+    TimeZoneLiteral z -> pure (TimeZoneLiteral z)
     List -> pure List
     ListLit t es
         | Data.Sequence.null es -> ListLit <$> t' <*> pure Data.Sequence.empty
@@ -840,6 +846,12 @@
       TextAppend _ _ -> False
       TextReplace -> True
       TextShow -> True
+      Date -> True
+      DateLiteral _ -> True
+      Time -> True
+      TimeLiteral _ _ -> True
+      TimeZone -> True
+      TimeZoneLiteral _ -> True
       List -> True
       ListLit t es -> all loop t && all loop es
       ListAppend x y -> loop x && loop y && decide x y
diff --git a/src/Dhall/Parser/Combinators.hs b/src/Dhall/Parser/Combinators.hs
--- a/src/Dhall/Parser/Combinators.hs
+++ b/src/Dhall/Parser/Combinators.hs
@@ -19,6 +19,7 @@
     , takeWhile1
     , toMap
     , toMapWith
+    , base
     ) where
 
 
@@ -35,7 +36,7 @@
 import Text.Parser.Token         (TokenParsing (..))
 
 import qualified Control.Monad.Fail
-import qualified Data.Char
+import qualified Data.Char                               as Char
 import qualified Data.Text
 import qualified Data.Text.Prettyprint.Doc.Render.String as Pretty
 import qualified Dhall.Map
@@ -214,7 +215,7 @@
 instance TokenParsing Parser where
     someSpace =
         Text.Parser.Token.Style.buildSomeSpaceParser
-            (Parser (Text.Megaparsec.skipSome (Text.Megaparsec.satisfy Data.Char.isSpace)))
+            (Parser (Text.Megaparsec.skipSome (Text.Megaparsec.satisfy Char.isSpace)))
             Text.Parser.Token.Style.haskellCommentStyle
 
     highlight _ = id
@@ -279,3 +280,15 @@
 toMapWith combine kvs = sequence m
   where
     m = Dhall.Map.fromListWithKey combine (map (\(k, v) -> (k, pure v)) kvs)
+
+-- | Convert a list of digits to the equivalent number
+base :: Num n => [Char] -> n -> n
+digits `base` b = foldl snoc 0 (map (fromIntegral . digitToNumber) digits)
+  where
+    snoc result number = result * b + number
+
+    digitToNumber c
+        | '0' <= c && c <= '9' = 0x0 + Char.ord c - Char.ord '0'
+        | 'A' <= c && c <= 'F' = 0xA + Char.ord c - Char.ord 'A'
+        | 'a' <= c && c <= 'f' = 0xa + Char.ord c - Char.ord 'a'
+        | otherwise = error "Invalid hexadecimal digit"
diff --git a/src/Dhall/Parser/Expression.hs b/src/Dhall/Parser/Expression.hs
--- a/src/Dhall/Parser/Expression.hs
+++ b/src/Dhall/Parser/Expression.hs
@@ -27,6 +27,7 @@
 import qualified Data.Sequence
 import qualified Data.Text
 import qualified Data.Text.Encoding
+import qualified Data.Time                          as Time
 import qualified Dhall.Crypto
 import qualified Text.Megaparsec
 
@@ -108,6 +109,132 @@
     , importExpression_   :: Parser (Expr Src a)
     }
 
+{-| Parse a numeric `TimeZone`
+
+    This corresponds to the @time-numoffset@ rule from the official grammar
+-}
+timeNumOffset :: Parser (Expr s a)
+timeNumOffset = do
+    s <- signPrefix
+
+    hour <- timeHour
+
+    _ <- text ":"
+
+    minute <- timeMinute
+
+    let minutes = s (hour * 60 + minute)
+
+    return (TimeZoneLiteral (Time.TimeZone minutes Prelude.False ""))
+
+{-| Parse a numeric `TimeZone` or a @Z@
+
+    This corresponds to the @time-offset@ rule from the official grammar
+-}
+timeOffset :: Parser (Expr s a)
+timeOffset =
+        (do _ <- text "Z"
+
+            return (TimeZoneLiteral (Time.TimeZone 0 Prelude.False ""))
+        )
+    <|> timeNumOffset
+
+{-| Parse a `Time`
+
+    This corresponds to the @partial-time@ rule from the official grammar
+-}
+partialTime :: Parser (Expr s a)
+partialTime = do
+    hour <- timeHour
+
+    _ <- text ":"
+
+    minute <- timeMinute
+
+    _ <- text ":"
+
+    second <- timeSecond
+
+    (fraction, precision) <- timeSecFrac <|> pure (0, 0)
+
+    let time = Time.TimeOfDay hour minute (second + fraction)
+
+    return (TimeLiteral time precision)
+
+{-| Parse a `Date`
+
+    This corresponds to the @full-date@ rule from the official grammar
+-}
+fullDate :: Parser (Expr s a)
+fullDate = do
+    year <- dateFullYear
+
+    _ <- text "-"
+
+    month <- dateMonth
+
+    _ <- text "-"
+
+    day <- dateMday
+
+    case Time.fromGregorianValid year month day of
+        Nothing -> fail "Invalid calendar day"
+        Just d  -> return (DateLiteral d)
+
+{-| Parse a `Date`, `Time`, `TimeZone` or any valid permutation of them as a
+    record
+
+    This corresponds to the @temporal-literal@ rule from the official grammar
+-}
+temporalLiteral :: Parser (Expr s a)
+temporalLiteral =
+        try (do
+            date <- fullDate
+
+            _ <- text "T" <|> text "t"
+
+            time <- partialTime
+
+            timeZone <- timeOffset
+
+            return
+                (RecordLit
+                    [   ("date"    , makeRecordField date)
+                    ,   ("time"    , makeRecordField time)
+                    ,   ("timeZone", makeRecordField timeZone)
+                    ]
+                )
+        )
+    <|> try (do
+            date <- fullDate
+
+            _ <- text "T" <|> text "t"
+
+            time <- partialTime
+
+            return
+                (RecordLit
+                    [   ("date", makeRecordField date)
+                    ,   ("time", makeRecordField time)
+                    ]
+                )
+        )
+    <|> try (do
+            time <- partialTime
+
+            timeZone <- timeOffset
+
+            return
+                (RecordLit
+                    [   ("time"    , makeRecordField time)
+                    ,   ("timeZone", makeRecordField timeZone)
+                    ]
+                )
+        )
+    <|> try fullDate
+    <|> try partialTime
+    <|> try timeNumOffset
+
 -- | Given a parser for imports,
 parsers :: forall a. Parser a -> Parsers a
 parsers embedded = Parsers {..}
@@ -253,7 +380,7 @@
                         _          -> empty
 
                     bs <- some (do
-                        try (whitespace *> _with *> nonemptyWhitespace)
+                        try (nonemptyWhitespace *> _with *> nonemptyWhitespace)
 
                         keys <- Combinators.NonEmpty.sepBy1 anyLabel (try (whitespace *> _dot) *> whitespace)
 
@@ -481,7 +608,8 @@
     primitiveExpression =
             noted
                 ( choice
-                    [ alternative00
+                    [ temporalLiteral
+                    , alternative00
                     , alternative01
                     , alternative02
                     , textLiteral
@@ -577,7 +705,8 @@
 
                     'D' ->
                         choice
-                            [ DoubleShow       <$ _DoubleShow
+                            [ Date             <$ _Date
+                            , DoubleShow       <$ _DoubleShow
                             , Double           <$ _Double
                             ]
                     'L' ->
@@ -599,6 +728,8 @@
                             [ TextReplace      <$ _TextReplace
                             , TextShow         <$ _TextShow
                             , Text             <$ _Text
+                            , TimeZone         <$ _TimeZone
+                            , Time             <$ _Time
                             , BoolLit True     <$ _True
                             , Const Type       <$ _Type
                             ]
diff --git a/src/Dhall/Parser/Token.hs b/src/Dhall/Parser/Token.hs
--- a/src/Dhall/Parser/Token.hs
+++ b/src/Dhall/Parser/Token.hs
@@ -24,10 +24,18 @@
     hexdig,
     identifier,
     hexNumber,
+    signPrefix,
     doubleLiteral,
     doubleInfinity,
     naturalLiteral,
     integerLiteral,
+    dateFullYear,
+    dateMonth,
+    dateMday,
+    timeHour,
+    timeMinute,
+    timeSecond,
+    timeSecFrac,
     _Optional,
     _if,
     _then,
@@ -68,6 +76,9 @@
     _Text,
     _TextReplace,
     _TextShow,
+    _Date,
+    _Time,
+    _TimeZone,
     _List,
     _True,
     _False,
@@ -115,12 +126,14 @@
 
 import Control.Applicative     (Alternative (..), optional)
 import Data.Bits               ((.&.))
+import Data.Fixed              (Pico)
 import Data.Functor            (void, ($>))
+import Data.Ratio              ((%))
 import Data.Text               (Text)
 import Dhall.Syntax
 import Text.Parser.Combinators (choice, try, (<?>))
 
-import qualified Control.Monad
+import qualified Control.Monad              as Monad
 import qualified Data.Char                  as Char
 import qualified Data.Foldable
 import qualified Data.HashSet
@@ -185,6 +198,7 @@
     ||  ('A' <= c && c <= 'F')
     ||  ('a' <= c && c <= 'f')
 
+-- | Parse a leading @+@ or @-@ sign
 signPrefix :: Num a => Parser (a -> a)
 signPrefix = (do
     let positive = fmap (\_ -> id    ) (char '+')
@@ -303,7 +317,100 @@
           where
             step acc x = acc * 10 + x
 
+{-| Parse a 4-digit year
 
+    This corresponds to the @date-fullyear@ rule from the official grammar
+-}
+dateFullYear :: Parser Integer
+dateFullYear = do
+    digits <- Monad.replicateM 4 (Text.Parser.Char.satisfy digit)
+
+    return (digits `base` 10)
+
+{-| Parse a 2-digit month
+
+    This corresponds to the @date-month@ rule from the official grammar
+-}
+dateMonth :: Parser Int
+dateMonth = do
+    digits <- Monad.replicateM 2 (Text.Parser.Char.satisfy digit)
+
+    let month = digits `base` 10
+
+    if 1 <= month && month <= 12
+        then return month
+        else fail "Invalid month"
+
+{-| Parse a 2-digit day of the month
+
+    This corresponds to the @date-mday@ rule from the official grammar
+-}
+dateMday :: Parser Int
+dateMday = do
+    digits <- Monad.replicateM 2 (Text.Parser.Char.satisfy digit)
+
+    let day = digits `base` 10
+
+    if 1 <= day && day <= 31
+        then return day
+        else fail "Invalid day"
+
+{-| Parse a 2-digit hour
+
+    This corresponds to the @time-hour@ rule from the official grammar
+-}
+timeHour :: Parser Int
+timeHour = do
+    digits <- Monad.replicateM 2 (Text.Parser.Char.satisfy digit)
+
+    let hour = digits `base` 10
+
+    if 0 <= hour && hour < 24
+        then return hour
+        else fail "Invalid hour"
+
+{-| Parse a 2-digit minute
+
+    This corresponds to the @time-minute@ rule from the official grammar
+-}
+timeMinute :: Parser Int
+timeMinute = do
+    digits <- Monad.replicateM 2 (Text.Parser.Char.satisfy digit)
+
+    let minute = digits `base` 10
+
+    if 0 <= minute && minute < 60
+        then return minute
+        else fail "Invalid minute"
+
+{-| Parse a 2-digit second
+
+    This corresponds to the @time-second@ rule from the official grammar
+-}
+timeSecond :: Parser Pico
+timeSecond = do
+    digits <- Monad.replicateM 2 (Text.Parser.Char.satisfy digit)
+
+    let second = digits `base` 10
+
+    if 0 <= second && second < 60
+        then return second
+        else fail "Invalid second"
+
+{-| Parse the fractional component of a second
+
+    This corresponds to the @time-secfrac@ rule from the official grammar
+-}
+timeSecFrac :: Parser (Pico, Word)
+timeSecFrac = do
+    _ <- Text.Parser.Char.text "."
+
+    digits <- some (Text.Parser.Char.satisfy digit)
+
+    let precision = fromIntegral (length digits)
+
+    return (fromRational ((digits `base` 10) % (10 ^ precision)), precision)
+
 {-| Parse an identifier (i.e. a variable or built-in)
 
     Variables can have an optional index to disambiguate shadowed variables
@@ -415,7 +522,7 @@
     let t = Data.Text.cons c rest
     let isNotAKeyword = not $ t `Data.HashSet.member` reservedKeywords
     let isNotAReservedIdentifier = not $ t `Data.HashSet.member` reservedIdentifiers
-    Control.Monad.guard (isNotAKeyword && (allowReserved || isNotAReservedIdentifier))
+    Monad.guard (isNotAKeyword && (allowReserved || isNotAReservedIdentifier))
     return t
 
 headCharacter :: Char -> Bool
@@ -1061,6 +1168,27 @@
 -}
 _TextShow :: Parser ()
 _TextShow = builtin "Text/show"
+
+{-| Parse the @Date@ bult-in
+
+    This corresponds to the @Date@ rule from the official grammar
+-}
+_Date :: Parser ()
+_Date = builtin "Date"
+
+{-| Parse the @Time@ bult-in
+
+    This corresponds to the @Time@ rule from the official grammar
+-}
+_Time :: Parser ()
+_Time = builtin "Time"
+
+{-| Parse the @TimeZone@ bult-in
+
+    This corresponds to the @TimeZone@ rule from the official grammar
+-}
+_TimeZone :: Parser ()
+_TimeZone = builtin "TimeZone"
 
 {-| Parse the @List@ built-in
 
diff --git a/src/Dhall/Pretty.hs b/src/Dhall/Pretty.hs
--- a/src/Dhall/Pretty.hs
+++ b/src/Dhall/Pretty.hs
@@ -16,6 +16,8 @@
 
     , escapeEnvironmentVariable
     , escapeLabel
+
+    , temporalToText
     ) where
 
 import Dhall.Pretty.Internal
diff --git a/src/Dhall/Pretty/Internal.hs b/src/Dhall/Pretty/Internal.hs
--- a/src/Dhall/Pretty/Internal.hs
+++ b/src/Dhall/Pretty/Internal.hs
@@ -68,6 +68,8 @@
     , rbrace
     , rbracket
     , rparen
+
+    , temporalToText
     ) where
 
 import Control.DeepSeq            (NFData)
@@ -88,7 +90,7 @@
 
 import qualified Data.Char
 import qualified Data.HashSet
-import qualified Data.List
+import qualified Data.List                                 as List
 import qualified Data.List.NonEmpty                        as NonEmpty
 import qualified Data.Maybe
 import qualified Data.Text                                 as Text
@@ -96,7 +98,9 @@
 import qualified Data.Text.Prettyprint.Doc.Render.String   as Pretty
 import qualified Data.Text.Prettyprint.Doc.Render.Terminal as Terminal
 import qualified Data.Text.Prettyprint.Doc.Render.Text     as Pretty
+import qualified Data.Time                                 as Time
 import qualified Dhall.Map                                 as Map
+import qualified Text.Printf                               as Printf
 
 {-| Annotation type used to tag elements in a pretty-printed document for
     syntax highlighting purposes
@@ -389,7 +393,7 @@
 arrows :: CharacterSet -> [ Doc Ann ] -> Doc Ann
 arrows characterSet docs = Pretty.group (Pretty.flatAlt long short)
   where
-    long = Pretty.align (mconcat (Data.List.intersperse Pretty.hardline docs'))
+    long = Pretty.align (mconcat (List.intersperse Pretty.hardline docs'))
       where
         docs' = case unsnoc docs of
             Nothing -> docs
@@ -402,7 +406,7 @@
 
                  last' = space <> space <> last_
 
-    short = mconcat (Data.List.intersperse separator docs)
+    short = mconcat (List.intersperse separator docs)
       where
         separator = space <> rarrow characterSet <> space
 
@@ -481,7 +485,7 @@
     longLines = zipWith (<>) (beginLong : repeat sepLong) docsLong
 
     long =
-        Pretty.align (mconcat (Data.List.intersperse Pretty.hardline longLines))
+        Pretty.align (mconcat (List.intersperse Pretty.hardline longLines))
 
     short = mconcat (zipWith (<>) (beginShort : repeat sepShort) docsShort)
 
@@ -693,7 +697,7 @@
         longLines = zipWith (<>) prefixesLong (docsLong True a0)
 
         long =
-            Pretty.align (mconcat (Data.List.intersperse Pretty.hardline longLines))
+            Pretty.align (mconcat (List.intersperse Pretty.hardline longLines))
 
         short = mconcat (zipWith (<>) prefixesShort (docsShort a0))
 
@@ -1306,6 +1310,51 @@
         builtin "Text/replace"
     prettyPrimitiveExpression TextShow =
         builtin "Text/show"
+    prettyPrimitiveExpression Date =
+        builtin "Date"
+    prettyPrimitiveExpression (DateLiteral day) =
+        literal
+            (   Pretty.pretty (Printf.printf "%04d" _HHHH :: String)
+            <>  "-"
+            <>  Pretty.pretty (Printf.printf "%02d" _MM :: String)
+            <>  "-"
+            <>  Pretty.pretty (Printf.printf "%02d" _DD :: String)
+            )
+      where
+        (_HHHH, _MM, _DD) = Time.toGregorian day
+    prettyPrimitiveExpression Time =
+        builtin "Time"
+    prettyPrimitiveExpression (TimeLiteral (Time.TimeOfDay hh mm seconds) precision) =
+        literal
+            (   Pretty.pretty (Printf.printf "%02d" hh :: String)
+            <>  ":"
+            <>  Pretty.pretty (Printf.printf "%02d" mm :: String)
+            <>  ":"
+            <>  Pretty.pretty (Printf.printf "%02d" ss :: String)
+            <>  suffix
+            )
+      where
+        magnitude :: Integer
+        magnitude = 10 ^ precision
+
+        (ss, fraction) = truncate (seconds * fromInteger magnitude) `divMod` magnitude
+
+        suffix
+            | precision == 0 = ""
+            | otherwise      = "." <> Pretty.pretty fraction
+    prettyPrimitiveExpression TimeZone =
+        builtin "TimeZone"
+    prettyPrimitiveExpression (TimeZoneLiteral (Time.TimeZone minutes _ _)) =
+        literal
+            (   sign
+            <>  Pretty.pretty (Printf.printf "%02d" _HH :: String)
+            <>  ":"
+            <>  Pretty.pretty (Printf.printf "%02d" _MM :: String)
+            )
+      where
+        sign = if 0 <= minutes then "+" else "-"
+
+        (_HH, _MM) = minutes `divMod` 60
     prettyPrimitiveExpression List =
         builtin "List"
     prettyPrimitiveExpression ListBuild =
@@ -1466,14 +1515,43 @@
 
     prettyRecord :: Pretty a => Map Text (RecordField Src a) -> Doc Ann
     prettyRecord =
-          braces
+        ( braces
         . map (prettyKeyValue prettyExpression colon . adapt)
         . Map.toList
+        )
       where
         adapt (key, RecordField mSrc0 val mSrc1 mSrc2) = KeyValue (pure (mSrc0, key, mSrc1)) mSrc2 val
 
     prettyRecordLit :: Pretty a => Map Text (RecordField Src a) -> Doc Ann
-    prettyRecordLit = prettyRecordLike braces
+    prettyRecordLit m
+        | [ ("date"    , field -> d@DateLiteral{})
+          , ("time"    , field -> t@TimeLiteral{})
+          , ("timeZone", field -> z@TimeZoneLiteral{})
+          ] <- List.sortOn fst (Map.toList m) =
+              literal
+                  (   prettyPrimitiveExpression d
+                  <>  "T"
+                  <>  prettyPrimitiveExpression t
+                  <>  prettyPrimitiveExpression z
+                  )
+        | [ ("date"    , field -> d@DateLiteral{})
+          , ("time"    , field -> t@TimeLiteral{})
+          ] <- List.sortOn fst (Map.toList m) =
+              literal
+                  (   prettyPrimitiveExpression d
+                  <>  "T"
+                  <>  prettyPrimitiveExpression t
+                  )
+        | [ ("time"    , field -> t@TimeLiteral{})
+          , ("timeZone", field -> z@TimeZoneLiteral{})
+          ] <- List.sortOn fst (Map.toList m) =
+              literal
+                  (   prettyPrimitiveExpression t
+                  <>  prettyPrimitiveExpression z
+                  )
+      where
+        field = Dhall.Syntax.shallowDenote . recordFieldValue
+    prettyRecordLit m = prettyRecordLike braces m
 
     prettyCompletionLit :: Pretty a => Int -> Map Text (RecordField Src a) -> Doc Ann
     prettyCompletionLit = prettyRecordLike . hangingBraces
@@ -1549,8 +1627,7 @@
                 (if Text.null line then id else literal)
                     (Pretty.pretty line)
 
-            docs =
-                Data.List.intersperse Pretty.hardline (map prettyLine lines_)
+            docs = List.intersperse Pretty.hardline (map prettyLine lines_)
 
         prettyChunk (c, d) =
                 prettyText c
@@ -1799,6 +1876,33 @@
 layoutOpts =
     Pretty.defaultLayoutOptions
         { Pretty.layoutPageWidth = Pretty.AvailablePerLine 80 1.0 }
+
+{-| Convert an expression representing a temporal value to `Text`, if possible
+
+    This is used by downstream integrations (e.g. `dhall-json` for treating
+    temporal values as strings
+-}
+temporalToText :: Pretty a => Expr s a -> Maybe Text
+temporalToText e = case e of
+    RecordLit m
+        | [ ("date"    , field -> DateLiteral{})
+          , ("time"    , field -> TimeLiteral{})
+          , ("timeZone", field -> TimeZoneLiteral{})
+          ] <- List.sortOn fst (Map.toList m) -> rendered
+        | [ ("date"    , field -> DateLiteral{})
+          , ("time"    , field -> TimeLiteral{})
+          ] <- List.sortOn fst (Map.toList m) -> rendered
+        | [ ("time"    , field -> TimeLiteral{})
+          , ("timeZone", field -> TimeZoneLiteral{})
+          ] <- List.sortOn fst (Map.toList m) -> rendered
+    DateLiteral{} -> rendered
+    TimeLiteral{} -> rendered
+    TimeZoneLiteral{} -> rendered
+    _ -> Nothing
+  where
+    field = Dhall.Syntax.shallowDenote . recordFieldValue
+
+    rendered = Just (prettyToStrictText e)
 
 {- $setup
 >>> import Test.QuickCheck (Fun(..))
diff --git a/src/Dhall/Repl.hs b/src/Dhall/Repl.hs
--- a/src/Dhall/Repl.hs
+++ b/src/Dhall/Repl.hs
@@ -18,15 +18,13 @@
     , displayException
     , throwIO
     )
-import Control.Monad              (forM_)
+import Control.Monad                       (forM_)
 #if !(MIN_VERSION_base(4,13,0))
-import Control.Monad.Fail         (MonadFail)
+import Control.Monad.Fail                  (MonadFail)
 #endif
-import Control.Monad.IO.Class     (MonadIO, liftIO)
-import Control.Monad.State.Class  (MonadState, get, modify)
-import Control.Monad.State.Strict (evalStateT)
--- For the MonadFail instance for StateT.
-import Control.Monad.Trans.Instances       ()
+import Control.Monad.IO.Class              (MonadIO, liftIO)
+import Control.Monad.State.Class           (MonadState, get, modify)
+import Control.Monad.State.Strict          (evalStateT)
 import Data.Char                           (isSpace)
 import Data.List
     ( dropWhileEnd
diff --git a/src/Dhall/Syntax.hs b/src/Dhall/Syntax.hs
--- a/src/Dhall/Syntax.hs
+++ b/src/Dhall/Syntax.hs
@@ -13,6 +13,8 @@
 {-# LANGUAGE StandaloneDeriving         #-}
 {-# LANGUAGE UnicodeSyntax              #-}
 
+{-# OPTIONS_GHC -Wno-orphans #-}
+
 {-| This module contains the core syntax types and optics for them.
 
 'reservedIdentifiers', 'denote' and friends are included because they are
@@ -110,15 +112,22 @@
 import Unsafe.Coerce              (unsafeCoerce)
 
 import qualified Control.Monad
+import qualified Data.Fixed                as Fixed
 import qualified Data.HashSet
 import qualified Data.List.NonEmpty        as NonEmpty
 import qualified Data.Text
 import qualified Data.Text.Prettyprint.Doc as Pretty
+import qualified Data.Time                 as Time
 import qualified Dhall.Crypto
 import qualified Dhall.Optics              as Optics
 import qualified Lens.Family               as Lens
 import qualified Network.URI               as URI
 
+deriving instance Lift Time.Day
+deriving instance Lift Time.TimeOfDay
+deriving instance Lift Time.TimeZone
+deriving instance Lift (Fixed.Fixed a)
+
 -- $setup
 -- >>> import Dhall.Binary () -- For the orphan instance for `Serialise (Expr Void Import)`
 
@@ -532,6 +541,22 @@
     | TextReplace
     -- | > TextShow                                 ~  Text/show
     | TextShow
+    -- | > Date                                     ~  Date
+    | Date
+    -- | > DateLiteral (fromGregorian _YYYY _MM _DD) ~ YYYY-MM-DD
+    | DateLiteral Time.Day
+    -- | > Time                                     ~  Time
+    | Time
+    -- | > TimeLiteral (TimeOfDay hh mm ss) _       ~  hh:mm:ss
+    | TimeLiteral
+        Time.TimeOfDay
+        Word
+        -- ^ Precision
+    -- | > TimeZone                                 ~  TimeZone
+    | TimeZone
+    -- | > TimeZoneLiteral (TimeZone ( 60 * _HH + _MM) _ _) ~ +HH:MM
+    -- | > TimeZoneLiteral (TimeZone (-60 * _HH + _MM) _ _) ~ -HH:MM
+    | TimeZoneLiteral Time.TimeZone
     -- | > List                                     ~  List
     | List
     -- | > ListLit (Just t ) []                     ~  [] : t
@@ -815,6 +840,12 @@
 unsafeSubExpressions f (TextAppend a b) = TextAppend <$> f a <*> f b
 unsafeSubExpressions _ TextReplace = pure TextReplace
 unsafeSubExpressions _ TextShow = pure TextShow
+unsafeSubExpressions _ Date = pure Date
+unsafeSubExpressions _ (DateLiteral a) = pure (DateLiteral a)
+unsafeSubExpressions _ Time = pure Time
+unsafeSubExpressions _ (TimeLiteral a b) = pure (TimeLiteral a b)
+unsafeSubExpressions _ TimeZone = pure TimeZone
+unsafeSubExpressions _ (TimeZoneLiteral a) = pure (TimeZoneLiteral a)
 unsafeSubExpressions _ List = pure List
 unsafeSubExpressions f (ListLit a b) = ListLit <$> traverse f a <*> traverse f b
 unsafeSubExpressions f (ListAppend a b) = ListAppend <$> f a <*> f b
@@ -997,7 +1028,7 @@
         <>  foldMap prettyHeaders headers
       where
         prettyHeaders h =
-          " using " <> Pretty.unAnnotate (prettyImportExpression h)
+          " using (" <> Pretty.unAnnotate (Pretty.pretty h) <> ")"
 
         File {..} = path
 
@@ -1176,8 +1207,7 @@
 reservedKeywords :: HashSet Text
 reservedKeywords =
     Data.HashSet.fromList
-        [
-          "if"
+        [ "if"
         , "then"
         , "else"
         , "let"
@@ -1235,6 +1265,9 @@
         , "Integer"
         , "Double"
         , "Text"
+        , "Date"
+        , "Time"
+        , "TimeZone"
         , "List"
         , "Type"
         , "Kind"
diff --git a/src/Dhall/TypeCheck.hs b/src/Dhall/TypeCheck.hs
--- a/src/Dhall/TypeCheck.hs
+++ b/src/Dhall/TypeCheck.hs
@@ -38,7 +38,7 @@
 import Data.Sequence                     (Seq, ViewL (..))
 import Data.Set                          (Set)
 import Data.Text                         (Text)
-import Data.Text.Prettyprint.Doc         (Doc, Pretty (..))
+import Data.Text.Prettyprint.Doc         (Doc, Pretty (..), vsep)
 import Data.Typeable                     (Typeable)
 import Data.Void                         (Void, absurd)
 import Dhall.Context                     (Context)
@@ -578,6 +578,24 @@
         TextShow ->
             return (VText ~> VText)
 
+        Date ->
+            return (VConst Type)
+
+        DateLiteral _ ->
+            return VDate
+
+        Time ->
+            return (VConst Type)
+
+        TimeLiteral _ _ ->
+            return VTime
+
+        TimeZone ->
+            return (VConst Type)
+
+        TimeZoneLiteral _ ->
+            return VTimeZone
+
         List ->
             return (VConst Type ~> VConst Type)
 
@@ -774,7 +792,7 @@
 
             _R' <- loop ctx r
 
-            let r'' = quote names (eval values l)
+            let r'' = quote names (eval values r)
 
             xLs' <- case _L' of
                 VRecord xLs' ->
@@ -1380,15 +1398,20 @@
     | CantMultiply (Expr s a) (Expr s a)
     deriving (Show)
 
+formatHints :: [Doc Ann] -> Doc Ann
+formatHints hints = vsep (map format hints)
+  where
+    format hint = "\n\n\ESC[1;33mHint\ESC[0m: " <> hint
+
 shortTypeMessage :: (Eq a, Pretty a) => TypeMessage s a -> Doc Ann
 shortTypeMessage msg =
-    "\ESC[1;31mError\ESC[0m: " <> short <> "\n"
+    "\ESC[1;31mError\ESC[0m: " <> short <> formatHints hints <> "\n"
   where
     ErrorMessages {..} = prettyTypeMessage msg
 
 longTypeMessage :: (Eq a, Pretty a) => TypeMessage s a -> Doc Ann
 longTypeMessage msg =
-        "\ESC[1;31mError\ESC[0m: " <> short <> "\n"
+        "\ESC[1;31mError\ESC[0m: " <> short <> formatHints hints <> "\n"
     <>  "\n"
     <>  long
   where
@@ -1400,6 +1423,8 @@
 data ErrorMessages = ErrorMessages
     { short :: Doc Ann
     -- ^ Default succinct 1-line explanation of what went wrong
+    , hints :: [Doc Ann]
+    -- ^ Possibly-empty hints based on specific types involved in the error
     , long  :: Doc Ann
     -- ^ Longer and more detailed explanation of the error
     }
@@ -1410,6 +1435,12 @@
 insert :: Pretty a => a -> Doc Ann
 insert = Dhall.Util.insert
 
+emptyRecordTypeHint :: (Eq a, Pretty a) => Expr s a -> [Doc Ann]
+emptyRecordTypeHint expr =
+    if Eval.judgmentallyEqual expr (Record mempty) then
+        ["{} is the empty record type, use {=} for the empty record value"]
+    else []
+
 -- | Convert a `TypeMessage` to short- and long-form `ErrorMessages`
 prettyTypeMessage :: (Eq a, Pretty a) => TypeMessage s a -> ErrorMessages
 prettyTypeMessage (UnboundVariable x) = ErrorMessages {..}
@@ -1417,6 +1448,8 @@
   -- https://github.com/dhall-lang/dhall-haskell/pull/116
   where
     short = "Unbound variable: " <> Pretty.pretty x
+    
+    hints = []
 
     long =
         "Explanation: Expressions can only reference previously introduced (i.e. “bound”)\n\
@@ -1530,6 +1563,8 @@
 prettyTypeMessage (InvalidInputType expr) = ErrorMessages {..}
   where
     short = "Invalid function input"
+    
+    hints = []
 
     long =
         "Explanation: A function can accept an input “term” that has a given “type”, like\n\
@@ -1600,6 +1635,8 @@
   where
     short = "Invalid function output"
 
+    hints = []
+
     long =
         "Explanation: A function can return an output “term” that has a given “type”,    \n\
         \like this:                                                                      \n\
@@ -1679,6 +1716,8 @@
   where
     short = "Not a function"
 
+    hints = []
+
     long =
         "Explanation: Expressions separated by whitespace denote function application,   \n\
         \like this:                                                                      \n\
@@ -1819,6 +1858,8 @@
         <>  "\n"
         <>  Dhall.Diff.doc (Dhall.Diff.diffNormalized expr1 expr3)
 
+    hints = emptyRecordTypeHint expr2
+
     long =
         "Explanation: Every function declares what type or kind of argument to accept    \n\
         \                                                                                \n\
@@ -1952,6 +1993,9 @@
     short = "Expression doesn't match annotation\n"
         <>  "\n"
         <>  Dhall.Diff.doc (Dhall.Diff.diffNormalized expr1 expr2)
+
+    hints = []
+
     long =
         "Explanation: You can annotate an expression with its type or kind using the     \n\
         \❰:❱ symbol, like this:                                                          \n\
@@ -2048,6 +2092,8 @@
   where
     short = "❰Sort❱ has no type, kind, or sort"
 
+    hints = []
+
     long =
         "Explanation: There are five levels of expressions that form a hierarchy:        \n\
         \                                                                                \n\
@@ -2086,6 +2132,8 @@
         <>  "\n"
         <>  Dhall.Diff.doc (Dhall.Diff.diffNormalized Bool expr1)
 
+    hints = []
+
     long =
         "Explanation: Every ❰if❱ expression begins with a predicate which must have type \n\
         \❰Bool❱                                                                          \n\
@@ -2151,6 +2199,8 @@
         <>  "\n"
         <>  Dhall.Diff.doc (Dhall.Diff.diffNormalized expr1 expr3)
 
+    hints = []
+
     long =
         "Explanation: Every ❰if❱ expression has a ❰then❱ and ❰else❱ branch, each of which\n\
         \is an expression:                                                               \n\
@@ -2225,6 +2275,8 @@
   where
     short = "Internal error: A non-empty list literal violated an internal invariant"
 
+    hints = []
+
     long =
         "Explanation: Internal error: A non-empty list literal violated an internal      \n\
         \invariant.                                                                      \n\
@@ -2240,6 +2292,8 @@
   where
     short = "Invalid type for ❰List❱"
 
+    hints = []
+
     long =
         "Explanation: ❰List❱s can optionally document their type with a type annotation, \n\
         \like this:                                                                      \n\
@@ -2302,6 +2356,8 @@
   where
     short = "An empty list requires a type annotation"
 
+    hints = []
+
     long =
         "Explanation: Lists do not require a type annotation if they have at least one   \n\
         \element:                                                                        \n\
@@ -2329,6 +2385,8 @@
         <>  "\n"
         <>  Dhall.Diff.doc (Dhall.Diff.diffNormalized expr0 expr2)
 
+    hints = []
+
     long =
         "Explanation: Every element in a list must have the same type                    \n\
         \                                                                                \n\
@@ -2367,6 +2425,8 @@
         <>  "\n"
         <>  Dhall.Diff.doc (Dhall.Diff.diffNormalized expr0 expr2)
 
+    hints = []
+
     long =
         "Explanation: Every element in the list must have a type matching the type       \n\
         \annotation at the end of the list                                               \n\
@@ -2403,6 +2463,8 @@
   where
     short = "❰Some❱ argument has the wrong type"
 
+    hints = []
+
     long =
         "Explanation: The ❰Some❱ constructor expects an argument that is a term, where   \n\
         \the type of the type of a term must be ❰Type❱                                   \n\
@@ -2445,6 +2507,8 @@
   where
     short = "Invalid field type"
 
+    hints = []
+
     long =
         "Explanation: Every record type annotates each field with a ❰Type❱, a ❰Kind❱, or \n\
         \a ❰Sort❱ like this:                                                             \n\
@@ -2488,6 +2552,8 @@
   where
     short = "Invalid alternative type"
 
+    hints = []
+
     long =
         "Explanation: Every union type specifies the type of each alternative, like this:\n\
         \                                                                                \n\
@@ -2545,6 +2611,8 @@
         <>  "\n"
         <>  Dhall.Diff.doc (Dhall.Diff.diffNormalized expr0 expr1)
 
+    hints = []
+
     long =
         "Explanation: You can append two ❰List❱s using the ❰#❱ operator, like this:      \n\
         \                                                                                \n\
@@ -2583,10 +2651,12 @@
         txt1 = insert expr1
 
 prettyTypeMessage (CompletionSchemaMustBeARecord expr0 expr1) = ErrorMessages {..}
- where
-   short = "The completion schema must be a record"
+  where
+    short = "The completion schema must be a record"
 
-   long =
+    hints = []
+
+    long =
         "Explanation: You can complete records using the ❰::❱ operator:                  \n\
         \                                                                                \n\
         \    ┌─────────────────────────────────────────────────────────────────────────┐ \n\
@@ -2607,10 +2677,12 @@
         txt1 = insert expr1
 
 prettyTypeMessage (InvalidRecordCompletion fieldName expr0) = ErrorMessages {..}
- where
-   short = "Completion schema is missing a field: " <> pretty fieldName
+  where
+    short = "Completion schema is missing a field: " <> pretty fieldName
 
-   long =
+    hints = []
+
+    long =
         "Explanation: You can complete records using the ❰::❱ operator like this:\n\
         \                                                                                \n\
         \    ┌─────────────────────────────────────────────────────────────────────────┐ \n\
@@ -2636,6 +2708,8 @@
   where
     short = "You can only update records"
 
+    hints = []
+
     long =
         "Explanation: You can update records using the ❰with❱ keyword, like this:        \n\
         \                                                                                \n\
@@ -2689,6 +2763,8 @@
 
     short = "You can only " <> action <> " records"
 
+    hints = emptyRecordTypeHint expression
+
     long =
         "Explanation: You can " <> action <> " records using the ❰" <> op <> "❱ operator, like this:\n\
         \                                                                                \n\
@@ -2746,6 +2822,8 @@
   where
     short = "Invalid duplicate field: " <> Dhall.Pretty.Internal.prettyLabel k
 
+    hints = []
+
     long =
         "Explanation: You can specify a field twice if both fields are themselves        \n\
         \records, like this:                                                             \n\
@@ -2812,6 +2890,8 @@
   where
     short = "❰⩓❱ requires arguments that are record types"
 
+    hints = []
+
     long =
         "Explanation: You can only use the ❰⩓❱ operator on arguments that are record type\n\
         \literals, like this:                                                            \n\
@@ -2851,6 +2931,8 @@
   where
     short = "Record type mismatch"
 
+    hints = []
+
     long =
         "Explanation: You can only use the ❰⩓❱ operator on record types if they are both \n\
         \ ❰Type❱s or ❰Kind❱s:                                                            \n\
@@ -2901,6 +2983,8 @@
   where
     short = "Duplicate field cannot be merged: " <> pretty (toPath ks)
 
+    hints = []
+
     long =
         "Explanation: Duplicate fields are only allowed if they are both records and if  \n\
         \the two records can be recursively merged without collisions.                   \n\
@@ -2963,6 +3047,8 @@
   where
     short = "Field collision on: " <> pretty (toPath ks)
 
+    hints = []
+
     long =
         "Explanation: You can recursively merge records using the ❰∧❱ operator:          \n\
         \                                                                                \n\
@@ -3027,6 +3113,8 @@
   where
     short = "Field type collision on: " <> pretty (toPath ks)
 
+    hints = []
+
     long =
         "Explanation: You can recursively merge record types using the ❰⩓❱ operator, like\n\
         \this:                                                                           \n\
@@ -3068,6 +3156,8 @@
   where
     short = "❰merge❱ expects a record of handlers"
 
+    hints = []
+
     long =
         "Explanation: You can ❰merge❱ the alternatives of a union or an ❰Optional❱ using \n\
         \a record with one handler per alternative, like this:                           \n\
@@ -3123,6 +3213,8 @@
   where
     short = "❰merge❱ expects a union or an ❰Optional❱"
 
+    hints = []
+
     long =
         "Explanation: You can ❰merge❱ the alternatives of a union or an ❰Optional❱ using \n\
         \a record with one handler per alternative, like this:                           \n\
@@ -3173,6 +3265,8 @@
   where
     short = "Unused handler"
 
+    hints = []
+
     long =
         "Explanation: You can ❰merge❱ the alternatives of a union or an ❰Optional❱ using \n\
         \a record with one handler per alternative, like this:                           \n\
@@ -3216,6 +3310,8 @@
          xs@(_:_) -> "Missing handlers: " <> (Pretty.hsep . Pretty.punctuate Pretty.comma
                                              . map Dhall.Pretty.Internal.prettyLabel $ exemplar:xs)
 
+    hints = []
+
     long =
         "Explanation: You can ❰merge❱ the alternatives of a union or an ❰Optional❱ using \n\
         \a record with one handler per alternative, like this:                           \n\
@@ -3257,6 +3353,8 @@
   where
     short = "An empty ❰merge❱ requires a type annotation"
 
+    hints = []
+
     long =
         "Explanation: A ❰merge❱ does not require a type annotation if the union has at   \n\
         \least one alternative, like this                                                \n\
@@ -3289,6 +3387,8 @@
         <>  "\n"
         <>  Dhall.Diff.doc (Dhall.Diff.diffNormalized expr1 expr2)
 
+    hints = []
+
     long =
         "Explanation: You can ❰merge❱ the alternatives of a union or an ❰Optional❱ using \n\
         \a record with one handler per alternative, like this:                           \n\
@@ -3349,6 +3449,8 @@
   where
     short = "Disallowed handler type"
 
+    hints = []
+
     long =
         "Explanation: You can ❰merge❱ the alternatives of a union or an ❰Optional❱ using \n\
         \a record with one handler per alternative, like this:                           \n\
@@ -3397,6 +3499,8 @@
         <>  "\n"
         <>  Dhall.Diff.doc (Dhall.Diff.diffNormalized expr1 expr2)
 
+    hints = []
+
     long =
         "Explanation: You can ❰merge❱ the alternatives of a union or an ❰Optional❱ using \n\
         \a record with one handler per alternative, like this:                           \n\
@@ -3461,6 +3565,8 @@
         <>  "\n"
         <>  Dhall.Diff.doc (Dhall.Diff.diffNormalized expr0 expr1)
 
+    hints = []
+
     long =
         "Explanation: You can ❰merge❱ the alternatives of a union or an ❰Optional❱ using \n\
         \a record with one handler per alternative, like this:                           \n\
@@ -3515,6 +3621,8 @@
   where
     short = "Handler for "<> Dhall.Pretty.Internal.prettyLabel k <> " is not a function"
 
+    hints = []
+
     long =
         "Explanation: You can ❰merge❱ the alternatives of a union or an ❰Optional❱ using \n\
         \a record with one handler per alternative, like this:                           \n\
@@ -3552,10 +3660,12 @@
         txt0 = insert k
         txt1 = insert expr0
 
-prettyTypeMessage (MustMapARecord _expr0 _expr1) = ErrorMessages {..}
+prettyTypeMessage (MustMapARecord provided _providedType) = ErrorMessages {..}
   where
     short = "❰toMap❱ expects a record value"
 
+    hints = emptyRecordTypeHint provided
+
     long =
         "Explanation: You can apply ❰toMap❱ to any homogenous record, like this:         \n\
         \                                                                                \n\
@@ -3584,6 +3694,8 @@
   where
     short = "❰toMap❱ expects a record of kind ❰Type❱"
 
+    hints = []
+
     long =
         "Explanation: You can apply ❰toMap❱ to any homogenous record of kind ❰Type❱, like\n\
         \ this:                                                                          \n\
@@ -3610,6 +3722,8 @@
   where
     short = "❰toMap❱ expects a homogenous record"
 
+    hints = []
+
     long =
         "Explanation: You can apply ❰toMap❱ to any homogenous record, like this:         \n\
         \                                                                                \n\
@@ -3637,6 +3751,8 @@
         <>  "\n"
         <>  Dhall.Diff.doc (Dhall.Diff.diffNormalized expr0 expr1)
 
+    hints = []
+
     long =
         "Explanation: a ❰toMap❱ application has been annotated with a type that doesn't  \n\
         \match its inferred type.                                                        \n"
@@ -3648,6 +3764,8 @@
         <>  "\n"
         <>  insert expr
 
+    hints = []
+
     long =
         "Explanation: A ❰toMap❱ applied to an empty record must have a type annotation:  \n\
         \that matches a list of key-value pairs, like this                               \n\
@@ -3665,6 +3783,8 @@
   where
     short = "An empty ❰toMap❱ requires a type annotation"
 
+    hints = []
+
     long =
         "Explanation: A ❰toMap❱ does not require a type annotation if the record has at  \n\
         \least one field, like this                                                      \n\
@@ -3688,6 +3808,8 @@
   where
     short = "Not a record or a union"
 
+    hints = []
+
     long =
         "Explanation: You can only access fields on records or unions, like this:        \n\
         \                                                                                \n\
@@ -3746,6 +3868,8 @@
   where
     short = "Not a record"
 
+    hints = []
+
     long =
         "Explanation: You can only project fields on records, like this:                 \n\
         \                                                                                \n\
@@ -3807,6 +3931,8 @@
   where
     short = "Selector is not a record type"
 
+    hints = []
+
     long =
         "Explanation: You can project by an expression if that expression is a record    \n\
         \type:                                                                           \n\
@@ -3866,6 +3992,8 @@
   where
     short = "Duplicate projection label: " <> Dhall.Pretty.Internal.prettyLabel k
 
+    hints = []
+
     long =
         "Explanation: You can only specify a label once when projecting a record's fields\n\
         \by label.  For example, this is valid:                                          \n\
@@ -3896,6 +4024,8 @@
   where
     short = "Missing record field: " <> Dhall.Pretty.Internal.prettyLabel k
 
+    hints = []
+
     long =
         "Explanation: You can only access fields on records, like this:                  \n\
         \                                                                                \n\
@@ -3938,6 +4068,8 @@
   where
     short = "Missing constructor: " <> Dhall.Pretty.Internal.prettyLabel k
 
+    hints = []
+
     long =
         "Explanation: You can access constructors from unions, like this:                \n\
         \                                                                                \n\
@@ -3978,6 +4110,8 @@
         <>  "\n"
         <>  Dhall.Diff.doc (Dhall.Diff.diffNormalized expr2 expr3)
 
+    hints = []
+
     long =
         "Explanation: You can project a subset of fields from a record by specifying the \n\
         \desired type of the final record, like this:                                    \n\
@@ -4025,6 +4159,8 @@
         <>  "\n"
         <>  Dhall.Diff.doc (Dhall.Diff.diffNormalized expr0 expr1)
 
+    hints = []
+
     long =
         "Explanation: You can assert at type-checking time that two terms are equal if   \n\
         \they have the same normal form, like this:                                      \n\
@@ -4088,6 +4224,8 @@
   where
     short = "Not an equivalence\n"
 
+    hints = []
+
     long =
         "Explanation: The type annotation for an ❰assert❱ must evaluate to an equivalence\n\
         \of the form ❰x ≡ y❱, like this:                                                 \n\
@@ -4141,6 +4279,8 @@
   where
     short = "Incomparable expression\n"
 
+    hints = []
+
     long =
         "Explanation: You can use an ❰assert❱ to compare two terms for equivalence, like \n\
         \this:                                                                           \n\
@@ -4172,6 +4312,8 @@
   where
     short = "The two sides of the equivalence have different types"
 
+    hints = []
+
     long =
         "Explanation: You can use ❰≡❱ to compare two terms of the same type for          \n\
         \equivalence, like this:                                                         \n\
@@ -4211,6 +4353,8 @@
   where
     short = "❰with❱ only works on records"
 
+    hints = []
+
     long =
         "Explanation: You can use ❰with❱ to update a record, like this:                  \n\
         \                                                                                \n\
@@ -4262,6 +4406,8 @@
   where
     short = "You can only interpolate ❰Text❱"
 
+    hints = []
+
     long =
         "Explanation: Text interpolation only works on expressions of type ❰Text❱        \n\
         \                                                                                \n\
@@ -4324,6 +4470,8 @@
   where
     short = "❰++❱ only works on ❰Text❱"
 
+    hints = []
+
     long =
         "Explanation: The ❰++❱ operator expects two arguments that have type ❰Text❱      \n\
         \                                                                                \n\
@@ -4370,6 +4518,8 @@
   where
     short = "❰#❱ only works on ❰List❱s"
 
+    hints = []
+
     long =
         "Explanation: The ❰#❱ operator expects two arguments that are both ❰List❱s       \n\
         \                                                                                \n\
@@ -4405,6 +4555,8 @@
   where
     short = "❰" <> txt2 <> "❱ only works on ❰Bool❱s"
 
+    hints = []
+
     long =
         "Explanation: The ❰" <> txt2 <> "❱ operator expects two arguments that have type ❰Bool❱\n\
         \                                                                                \n\
@@ -4433,6 +4585,8 @@
 buildNaturalOperator operator expr0 expr1 = ErrorMessages {..}
   where
     short = "❰" <> txt2 <> "❱ only works on ❰Natural❱s"
+
+    hints = []
 
     long =
         "Explanation: The ❰" <> txt2 <> "❱ operator expects two arguments that have type ❰Natural❱\n\
diff --git a/src/Dhall/Util.hs b/src/Dhall/Util.hs
--- a/src/Dhall/Util.hs
+++ b/src/Dhall/Util.hs
@@ -22,6 +22,7 @@
     , CheckFailed(..)
     , MultipleCheckFailed(..)
     , handleMultipleChecksFailed
+    , renderExpression
     ) where
 
 import Control.Exception         (Exception (..))
@@ -34,7 +35,7 @@
 import Data.Text                 (Text)
 import Data.Text.Prettyprint.Doc (Doc, Pretty)
 import Dhall.Parser              (Header (..), ParseError)
-import Dhall.Pretty              (Ann)
+import Dhall.Pretty              (Ann, CharacterSet)
 import Dhall.Src                 (Src)
 import Dhall.Syntax              (Expr, Import)
 
@@ -43,8 +44,11 @@
 import qualified Data.Text.IO
 import qualified Data.Text.Prettyprint.Doc                 as Pretty
 import qualified Data.Text.Prettyprint.Doc.Render.Terminal as Pretty.Terminal
+import qualified Data.Text.Prettyprint.Doc.Render.Text     as Pretty.Text
 import qualified Dhall.Parser
 import qualified Dhall.Pretty
+import qualified System.Console.ANSI                       as ANSI
+import qualified System.IO                                 as IO
 
 -- | Utility function to cut out the interior of a large text block
 snip :: Text -> Text
@@ -241,3 +245,31 @@
     :: Censor -> String -> Text -> IO (Header, Expr Src Import)
 getExpressionAndHeaderFromStdinText censor inputName =
     get Dhall.Parser.exprAndHeaderFromText censor . StdinText inputName
+
+{-| Convenient utility to output an expression either to a file
+    or to stdout.
+-}
+renderExpression :: Pretty a => CharacterSet -> Bool -> Maybe FilePath -> Expr Src a -> IO ()
+renderExpression characterSet plain output expression = do
+    let document = Dhall.Pretty.prettyCharacterSet characterSet expression
+
+    let stream = Dhall.Pretty.layout document
+
+    case output of
+        Nothing -> do
+            supportsANSI <- ANSI.hSupportsANSI IO.stdout
+
+            let ansiStream =
+                    if supportsANSI && not plain
+                    then fmap Dhall.Pretty.annToAnsiStyle stream
+                    else Pretty.unAnnotateS stream
+
+            Pretty.Terminal.renderIO IO.stdout ansiStream
+
+            Data.Text.IO.putStrLn ""
+
+        Just file_ ->
+            IO.withFile file_ IO.WriteMode $ \h -> do
+                Pretty.Text.renderIO h stream
+
+                Data.Text.IO.hPutStrLn h ""
diff --git a/tests/Dhall/Test/Import.hs b/tests/Dhall/Test/Import.hs
--- a/tests/Dhall/Test/Import.hs
+++ b/tests/Dhall/Test/Import.hs
@@ -5,6 +5,7 @@
 
 import Control.Exception (SomeException)
 import Data.Text         (Text)
+import Data.Void         (Void)
 import Prelude           hiding (FilePath)
 import Test.Tasty        (TestTree)
 import Turtle            (FilePath, (</>))
@@ -21,6 +22,7 @@
 import qualified Network.HTTP.Client              as HTTP
 import qualified Network.HTTP.Client.TLS          as HTTP
 import qualified System.FilePath                  as FilePath
+import qualified System.IO.Temp                   as Temp
 import qualified Test.Tasty                       as Tasty
 import qualified Test.Tasty.HUnit                 as Tasty.HUnit
 import qualified Turtle
@@ -45,7 +47,7 @@
             , importDirectory </> "success/unit/asLocation/RemoteChainMissingA.dhall"
             ]
 
-    successTests <- Test.Util.discover (Turtle.chars <> "A.dhall") successTest (do
+    successTests <- Test.Util.discover (Turtle.chars <* "A.dhall") successTest (do
         path <- Turtle.lstree (importDirectory </> "success")
 
         Monad.guard (path `notElem` flakyTests)
@@ -72,25 +74,33 @@
     return testTree
 
 successTest :: Text -> TestTree
-successTest path = do
-    let pathString = Text.unpack path
+successTest prefix = do
+    let inputPath = Text.unpack (prefix <> "A.dhall")
 
-    let directoryString = FilePath.takeDirectory pathString
+    let expectedPath = Text.unpack (prefix <> "B.dhall")
 
+    let directoryString = FilePath.takeDirectory inputPath
+
     let expectedFailures =
-            [ importDirectory </> "success/unit/cors/TwoHopsA.dhall"
-            , importDirectory </> "success/unit/cors/SelfImportAbsoluteA.dhall"
-            , importDirectory </> "success/unit/cors/AllowedAllA.dhall"
-            , importDirectory </> "success/unit/cors/SelfImportRelativeA.dhall"
-            , importDirectory </> "success/unit/cors/OnlyGithubA.dhall"
+            [ importDirectory </> "success/unit/cors/TwoHops"
+            , importDirectory </> "success/unit/cors/SelfImportAbsolute"
+            , importDirectory </> "success/unit/cors/AllowedAll"
+            , importDirectory </> "success/unit/cors/SelfImportRelative"
+            , importDirectory </> "success/unit/cors/OnlyGithub"
+            , importDirectory </> "success/userHeaders"
+            , importDirectory </> "success/userHeadersOverride"
             ]
 
-    Test.Util.testCase path expectedFailures (do
+    Test.Util.testCase prefix expectedFailures (do
 
-        text <- Text.IO.readFile pathString
+        text <- Text.IO.readFile inputPath
 
+        expectedText <- Text.IO.readFile expectedPath
+
         actualExpr <- Core.throws (Parser.exprFromText mempty text)
 
+        expectedExpr <- Core.throws (Parser.exprFromText mempty expectedText)
+
         let originalCache = "dhall-lang/tests/import/cache"
 
         let httpManager =
@@ -102,23 +112,23 @@
                     (Test.Util.loadWith actualExpr)
                     (Import.emptyStatusWithManager httpManager directoryString)
 
-        let usesCache = [ "hashFromCacheA.dhall"
-                        , "unit/asLocation/HashA.dhall"
-                        , "unit/IgnorePoisonedCacheA.dhall"
-                        , "unit/DontCacheIfHashA.dhall"
+        let usesCache = [ "hashFromCache"
+                        , "unit/asLocation/Hash"
+                        , "unit/IgnorePoisonedCache"
+                        , "unit/DontCacheIfHash"
                         ]
 
         let endsIn path' =
-                not (null (Turtle.match (Turtle.ends path') (Test.Util.toDhallPath path)))
+                not (null (Turtle.match (Turtle.ends path') (Test.Util.toDhallPath prefix)))
 
         let buildNewCache = do
-                tempdir <- Turtle.mktempdir "/tmp" "dhall-cache"
+                tempdir <- fmap Turtle.decodeString (Turtle.managed (Temp.withSystemTempDirectory "dhall-cache"))
                 Turtle.liftIO (Turtle.cptree originalCache tempdir)
                 return tempdir
 
-        let runTest =
+        let cacheSetup =
                 if any endsIn usesCache
-                    then Turtle.runManaged $ do
+                    then do
                         cacheDir <- buildNewCache
 
                         let set = do
@@ -134,30 +144,36 @@
                                 Turtle.export "XDG_CACHE_HOME" x
 
                         _ <- Turtle.managed (Exception.bracket set reset)
-
-                        _ <- Turtle.liftIO load
-
                         return ()
-                    else do
-                        _ <- load
+                else pure ()
 
-                        return ()
+        let setup = cacheSetup >> Test.Util.managedTestEnvironment prefix
 
-        let handler :: SomeException -> IO ()
+        let resolve = Turtle.with setup (const load)
+
+        let handler :: SomeException -> IO (Core.Expr Parser.Src Void)
             handler exception = Tasty.HUnit.assertFailure (show exception)
 
-        Exception.handle handler runTest
+        actualResolved <- Exception.handle handler resolve
 
-        return () )
+        expectedResolved <- Import.assertNoImports expectedExpr
 
+        let actual = Core.normalize actualResolved :: Core.Expr Void Void
+
+        let expected = Core.normalize expectedResolved :: Core.Expr Void Void
+
+        let message =
+                "The imported expression did not match the expected output"
+
+        Tasty.HUnit.assertEqual message expected actual)
+
 failureTest :: Text -> TestTree
 failureTest path = do
     let pathString = Text.unpack path
 
     Tasty.HUnit.testCase pathString (do
-        text <- Text.IO.readFile pathString
-
-        actualExpr <- Core.throws (Parser.exprFromText mempty text)
+        actualExpr <- do
+          Core.throws (Parser.exprFromText mempty (Test.Util.toDhallPath path))
 
         succeeded <- Exception.catch @SomeException
           (do _ <- Test.Util.load actualExpr
diff --git a/tests/Dhall/Test/QuickCheck.hs b/tests/Dhall/Test/QuickCheck.hs
--- a/tests/Dhall/Test/QuickCheck.hs
+++ b/tests/Dhall/Test/QuickCheck.hs
@@ -90,6 +90,7 @@
 import qualified Data.Set
 import qualified Data.SpecialValues
 import qualified Data.Text             as Text
+import qualified Data.Time             as Time
 import qualified Dhall.Binary
 import qualified Dhall.Context
 import qualified Dhall.Core
@@ -376,6 +377,12 @@
             % (1 :: W "TextAppend")
             % (1 :: W "TextReplace")
             % (1 :: W "TextShow")
+            % (1 :: W "Date")
+            % (1 :: W "DateLiteral")
+            % (1 :: W "Time")
+            % (1 :: W "TimeLiteral")
+            % (1 :: W "TimeZone")
+            % (1 :: W "TimeZoneLiteral")
             % (1 :: W "List")
             % (1 :: W "ListLit")
             % (1 :: W "ListAppend")
@@ -434,6 +441,14 @@
     False
 standardizedExpression (Annot (ToMap _ Nothing) _) =
     False
+standardizedExpression (TimeZoneLiteral (Time.TimeZone _ b t)) =
+    not b && null t
+standardizedExpression (TimeLiteral (Time.TimeOfDay _ _ ss) precision) =
+    isInteger (ss * magnitude)
+  where
+    magnitude = 10 ^ precision
+
+    isInteger x = x == fromInteger (round x)
 standardizedExpression _ =
     True
 
diff --git a/tests/Dhall/Test/Util.hs b/tests/Dhall/Test/Util.hs
--- a/tests/Dhall/Test/Util.hs
+++ b/tests/Dhall/Test/Util.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE CPP               #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE RankNTypes        #-}
+{-# LANGUAGE ViewPatterns      #-}
 
 module Dhall.Test.Util
     ( code
@@ -19,15 +20,20 @@
     , discover
     , Dhall.Test.Util.testCase
     , toDhallPath
+    , managedTestEnvironment
     ) where
 
 import Control.Monad.Trans.State.Strict (StateT)
+import Control.Applicative ((<|>), liftA2)
+import Control.Exception (tryJust)
+import Control.Monad     (guard)
 import Data.Bifunctor                   (first)
 import Data.Text                        (Text)
 import Data.Void                        (Void)
 import Dhall.Context                    (Context)
 import Dhall.Core
-    ( Expr
+    ( Chunks(..)
+    , Expr(..)
     , Import
     , Normalizer
     , ReifiedNormalizer (..)
@@ -35,6 +41,7 @@
 import Dhall.Import                     (SemanticCacheMode (..), Status (..))
 import Dhall.Parser                     (Src)
 import Prelude                          hiding (FilePath)
+import System.IO.Error                  (isDoesNotExistError)
 import Test.Tasty                       (TestTree)
 import Test.Tasty.HUnit
 import Turtle                           (FilePath, Pattern, Shell, fp)
@@ -42,11 +49,14 @@
 import qualified Control.Exception
 import qualified Control.Foldl                    as Foldl
 import qualified Control.Monad.Trans.State.Strict as State
+import qualified Data.Foldable
 import qualified Data.Functor
 import qualified Data.Text                        as Text
+import qualified Data.Text.IO                     as Text.IO
 import qualified Dhall.Context
 import qualified Dhall.Core
 import qualified Dhall.Import
+import qualified Dhall.Map
 import qualified Dhall.Parser
 import qualified Dhall.TypeCheck
 import qualified System.FilePath                  as FilePath
@@ -156,6 +166,57 @@
     fail ("(mock http) Url does not match any of the hard-coded rules: "
         <> urlString)
 #endif
+
+{- Given a test prefix, returns a managed resource
+   which sets / reverts relevant environment variables based
+   on `prefix <> "ENV.dhall"` (if present)
+ -}
+managedTestEnvironment :: Text -> Turtle.Managed [(Text, Maybe Text)]
+managedTestEnvironment prefix = Turtle.managed (Control.Exception.bracket setup cleanup)
+  where
+    envPath = Text.unpack (prefix <> "ENV.dhall")
+
+    setup :: IO [(Text, Maybe Text)]
+    setup = do
+        envFileContents <-
+            tryJust (guard . isDoesNotExistError) (Text.IO.readFile envPath)
+
+        testEnv <- case envFileContents of
+            Right contents -> do
+                resolved <- code contents
+                return (convertEnvExpr (Dhall.Core.normalize resolved))
+            Left _ -> return []
+
+        traverse setEnv testEnv
+
+    cleanup :: [(Text, Maybe Text)] -> IO ()
+    cleanup = Data.Foldable.traverse_ restoreEnv
+
+    convertEnvExpr :: Expr Src Void -> [(Text, Text)]
+    convertEnvExpr (ListLit _ hs) = Data.Foldable.toList (Data.Foldable.fold maybePairs)
+      where
+          maybePairs = mapM toPair hs
+
+          toPair :: Expr s a -> Maybe (Text, Text)
+          toPair (RecordLit m) = do
+              (Dhall.Core.recordFieldValue -> TextLit (Chunks [] key), Dhall.Core.recordFieldValue -> TextLit (Chunks [] value))
+                  <- lookupHeader <|> lookupMapKey
+              return (key, value)
+                where
+                  lookupHeader = liftA2 (,) (Dhall.Map.lookup "header" m) (Dhall.Map.lookup "value" m)
+                  lookupMapKey = liftA2 (,) (Dhall.Map.lookup "mapKey" m) (Dhall.Map.lookup "mapValue" m)
+          toPair _ = Nothing
+    convertEnvExpr _ = []
+
+    setEnv :: (Text, Text) -> IO (Text, Maybe Text)
+    setEnv (k, v) = do
+        old <- Turtle.need k
+        Turtle.export k v
+        return (k, old)
+
+    restoreEnv :: (Text, Maybe Text) -> IO ()
+    restoreEnv (k, Just old) = Turtle.export k old
+    restoreEnv (k, Nothing) = Turtle.unset k
 
 equivalent :: Text -> Text -> IO ()
 equivalent text0 text1 = do
diff --git a/tests/format/parenthesizeUsingA.dhall b/tests/format/parenthesizeUsingA.dhall
new file mode 100644
--- /dev/null
+++ b/tests/format/parenthesizeUsingA.dhall
@@ -0,0 +1,6 @@
+-- https://github.com/dhall-lang/dhall-haskell/issues/2273
+let MyPackage =
+      https://server.test/package.dhall using (./headers.dhall)
+        sha256:03a6e298ff140d430cea8b387fad886ce9f5bee24622c7d1102115cc08ed9cf8
+
+in  MyPackage
diff --git a/tests/format/parenthesizeUsingB.dhall b/tests/format/parenthesizeUsingB.dhall
new file mode 100644
--- /dev/null
+++ b/tests/format/parenthesizeUsingB.dhall
@@ -0,0 +1,6 @@
+-- https://github.com/dhall-lang/dhall-haskell/issues/2273
+let MyPackage =
+      https://server.test/package.dhall using (./headers.dhall)
+        sha256:03a6e298ff140d430cea8b387fad886ce9f5bee24622c7d1102115cc08ed9cf8
+
+in  MyPackage
diff --git a/tests/lint/success/sortLetsA.dhall b/tests/lint/success/sortLetsA.dhall
new file mode 100644
--- /dev/null
+++ b/tests/lint/success/sortLetsA.dhall
@@ -0,0 +1,11 @@
+let a = 1
+
+let b = 2
+
+let a = https://example.com
+
+let c = https://example.com
+
+let d = c
+
+in  [ a@1, a, b, c, d ]
diff --git a/tests/lint/success/sortLetsB.dhall b/tests/lint/success/sortLetsB.dhall
new file mode 100644
--- /dev/null
+++ b/tests/lint/success/sortLetsB.dhall
@@ -0,0 +1,11 @@
+let c = https://example.com/
+
+let a = 1
+
+let a = https://example.com/
+
+let b = 2
+
+let d = c
+
+in  [ a@1, a, b, c, d ]
