packages feed

dhall 1.35.0 → 1.36.0

raw patch · 138 files changed

+1045/−509 lines, 138 filesdep ~http-clientdep ~http-client-tlsdep ~text-manipulatePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: http-client, http-client-tls, text-manipulate

API changes (from Hackage documentation)

+ Dhall.Core: TextReplace :: Expr s a
+ Dhall.Lint: addPreludeExtensions :: Expr s Import -> Maybe (Expr s Import)
+ Dhall.Parser.Token: _TextReplace :: Parser ()
+ Dhall.TypeCheck: NotWithARecord :: Expr s a -> Expr s a -> TypeMessage s a

Files

CHANGELOG.md view
@@ -1,3 +1,17 @@+1.36.0++* [Supports version 19.0.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v19.0.0)+    * BREAKING CHANGE TO THE API: [Add `Text/replace` built-in](https://github.com/dhall-lang/dhall-haskell/pull/2063)+    * [Implement `with` without syntactic sugar](https://github.com/dhall-lang/dhall-haskell/pull/2055)+* [`dhall lint` will now add a `.dhall` extension to all Prelude imports](https://github.com/dhall-lang/dhall-haskell/pull/2061)+    * The old extension-free Prelude imports are deprecated+* [Fix command-line completions for files](https://github.com/dhall-lang/dhall-haskell/pull/2016)+* [Improve Template Haskell support for record constructors](https://github.com/dhall-lang/dhall-haskell/pull/2070)+* Fixes and improvements to code formatting+    * [#2037](https://github.com/dhall-lang/dhall-haskell/pull/2037)+    * [#2048](https://github.com/dhall-lang/dhall-haskell/pull/2048)+    * [#2069](https://github.com/dhall-lang/dhall-haskell/pull/2069)+ 1.35.0  * [Supports version 18.0.0 of the standard](https://github.com/dhall-lang/dhall-lang/releases/tag/v18.0.0)
dhall-lang/Prelude/Bool/package.dhall view
@@ -1,25 +1,25 @@ { and =-      ./and sha256:0b2114fa33cd76652e4360f012bc082718944fe4c5b28c975483178f8d9b0a6d-    ? ./and+      ./and.dhall sha256:0b2114fa33cd76652e4360f012bc082718944fe4c5b28c975483178f8d9b0a6d+    ? ./and.dhall , build =-      ./build sha256:add7cb9acacac705410088d876a7e4488e046a7aded304f06c51accffd7f1b7b-    ? ./build+      ./build.dhall sha256:add7cb9acacac705410088d876a7e4488e046a7aded304f06c51accffd7f1b7b+    ? ./build.dhall , even =-      ./even sha256:72a05ee550636a3acb768360fa51ba0db0326763e0cf1ceb737f0f3607fc0fe5-    ? ./even+      ./even.dhall sha256:72a05ee550636a3acb768360fa51ba0db0326763e0cf1ceb737f0f3607fc0fe5+    ? ./even.dhall , fold =-      ./fold sha256:39f60baf3950268c2e849e91dc6279ee41cd6b81892d54020d4fcd2ce30a96ae-    ? ./fold+      ./fold.dhall sha256:39f60baf3950268c2e849e91dc6279ee41cd6b81892d54020d4fcd2ce30a96ae+    ? ./fold.dhall , not =-      ./not sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4-    ? ./not+      ./not.dhall sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4+    ? ./not.dhall , odd =-      ./odd sha256:6360fca3a745de32bd186cc7b71487a6398cd47d5119064eae491872c41d1999-    ? ./odd+      ./odd.dhall sha256:6360fca3a745de32bd186cc7b71487a6398cd47d5119064eae491872c41d1999+    ? ./odd.dhall , or =-      ./or sha256:5c50738e84e1c4fed8343ebd57608500e1b61ac1f502aa52d6d6edb5c20b99e4-    ? ./or+      ./or.dhall sha256:5c50738e84e1c4fed8343ebd57608500e1b61ac1f502aa52d6d6edb5c20b99e4+    ? ./or.dhall , show =-      ./show sha256:f85f6d2d921c37a2122cb2e2f8a0170e305b699debd0e6df5ef3370d806b5f61-    ? ./show+      ./show.dhall sha256:f85f6d2d921c37a2122cb2e2f8a0170e305b699debd0e6df5ef3370d806b5f61+    ? ./show.dhall }
dhall-lang/Prelude/Double/package.dhall view
@@ -1,4 +1,4 @@ { show =-      ./show sha256:ae645813cc4d8505a265df4d7564c95482f62bb3e07fc81681959599b6cee04f-    ? ./show+      ./show.dhall sha256:ae645813cc4d8505a265df4d7564c95482f62bb3e07fc81681959599b6cee04f+    ? ./show.dhall }
dhall-lang/Prelude/Function/package.dhall view
@@ -1,7 +1,7 @@ { compose =-      ./compose sha256:65ad8bbea530b3d8968785a7cf4a9a7976b67059aa15e3b61fcba600a40ae013-    ? ./compose+      ./compose.dhall sha256:65ad8bbea530b3d8968785a7cf4a9a7976b67059aa15e3b61fcba600a40ae013+    ? ./compose.dhall , identity =-      ./identity sha256:f78b96792b459cb664f41c6119bd8897dd04353a3343521d436cd82ad71cb4d4-    ? ./identity+      ./identity.dhall sha256:f78b96792b459cb664f41c6119bd8897dd04353a3343521d436cd82ad71cb4d4+    ? ./identity.dhall }
dhall-lang/Prelude/Integer/add.dhall view
@@ -1,7 +1,7 @@ --| `add m n` computes `m + n`. let Integer/subtract =-        ./subtract sha256:a34d36272fa8ae4f1ec8b56222fe8dc8a2ec55ec6538b840de0cbe207b006fda-      ? ./subtract+        ./subtract.dhall sha256:a34d36272fa8ae4f1ec8b56222fe8dc8a2ec55ec6538b840de0cbe207b006fda+      ? ./subtract.dhall  let add     : Integer → Integer → Integer
dhall-lang/Prelude/Integer/equal.dhall view
@@ -1,7 +1,7 @@ --| `equal` checks if two Integers are equal. let Natural/equal =-        ../Natural/equal sha256:7f108edfa35ddc7cebafb24dc073478e93a802e13b5bc3fd22f4768c9b066e60-      ? ../Natural/equal+        ../Natural/equal.dhall sha256:7f108edfa35ddc7cebafb24dc073478e93a802e13b5bc3fd22f4768c9b066e60+      ? ../Natural/equal.dhall  let equal     : Integer → Integer → Bool
dhall-lang/Prelude/Integer/greaterThan.dhall view
@@ -1,11 +1,11 @@ --| `greaterThan` checks if one Integer is greater than another. let Bool/not =-        ../Bool/not sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4-      ? ../Bool/not+        ../Bool/not.dhall sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4+      ? ../Bool/not.dhall  let lessThanEqual =-        ./lessThanEqual sha256:e3cca9f3942f81fa78a2bea23c0c24519c67cfe438116c38e797e12dcd26f6bc-      ? ./lessThanEqual+        ./lessThanEqual.dhall sha256:e3cca9f3942f81fa78a2bea23c0c24519c67cfe438116c38e797e12dcd26f6bc+      ? ./lessThanEqual.dhall  let greaterThan     : Integer → Integer → Bool
dhall-lang/Prelude/Integer/greaterThanEqual.dhall view
@@ -2,8 +2,8 @@ `greaterThanEqual` checks if one Integer is greater than or equal to another. -} let lessThanEqual =-        ./lessThanEqual sha256:e3cca9f3942f81fa78a2bea23c0c24519c67cfe438116c38e797e12dcd26f6bc-      ? ./lessThanEqual+        ./lessThanEqual.dhall sha256:e3cca9f3942f81fa78a2bea23c0c24519c67cfe438116c38e797e12dcd26f6bc+      ? ./lessThanEqual.dhall  let greaterThanEqual     : Integer → Integer → Bool
dhall-lang/Prelude/Integer/lessThan.dhall view
@@ -1,7 +1,7 @@ --| `lessThan` checks if one Integer is less than another. let greaterThan =-        ./greaterThan sha256:d23affd73029fc9aaf867c2c7b86510ca2802d3f0d1f3e1d1a93ffd87b7cb64b-      ? ./greaterThan+        ./greaterThan.dhall sha256:d23affd73029fc9aaf867c2c7b86510ca2802d3f0d1f3e1d1a93ffd87b7cb64b+      ? ./greaterThan.dhall  let lessThan     : Integer → Integer → Bool
dhall-lang/Prelude/Integer/lessThanEqual.dhall view
@@ -1,19 +1,19 @@ --| `lessThanEqual` checks if one Integer is less than or equal to another. let Natural/greaterThanEqual =-        ../Natural/greaterThanEqual sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4-      ? ../Natural/greaterThanEqual+        ../Natural/greaterThanEqual.dhall sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4+      ? ../Natural/greaterThanEqual.dhall  let Natural/lessThanEqual =-        ../Natural/lessThanEqual sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99-      ? ../Natural/lessThanEqual+        ../Natural/lessThanEqual.dhall sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99+      ? ../Natural/lessThanEqual.dhall  let nonPositive =-        ./nonPositive sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b-      ? ./nonPositive+        ./nonPositive.dhall sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b+      ? ./nonPositive.dhall  let nonNegative =-        ./nonNegative sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663-      ? ./nonNegative+        ./nonNegative.dhall sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663+      ? ./nonNegative.dhall  let lessThanEqual     : Integer → Integer → Bool
dhall-lang/Prelude/Integer/multiply.dhall view
@@ -1,8 +1,8 @@ --| `multiply m n` computes `m * n`.  let nonPositive =-        ./nonPositive sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b-      ? ./nonPositive+        ./nonPositive.dhall sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b+      ? ./nonPositive.dhall  let multiplyNonNegative =       λ(x : Integer) →
dhall-lang/Prelude/Integer/negative.dhall view
@@ -4,8 +4,8 @@ `negative` is more efficient than `./lessThan +0` or `./lessThanEqual -1`. -} let positive =-        ./positive sha256:7bdbf50fcdb83d01f74c7e2a92bf5c9104eff5d8c5b4587e9337f0caefcfdbe3-      ? ./positive+        ./positive.dhall sha256:7bdbf50fcdb83d01f74c7e2a92bf5c9104eff5d8c5b4587e9337f0caefcfdbe3+      ? ./positive.dhall  let negative     : Integer → Bool
dhall-lang/Prelude/Integer/nonNegative.dhall view
@@ -4,8 +4,8 @@ `nonNegative` is more efficient than `./greaterThanEqual +0` or `./greaterThan -1`. -} let nonPositive =-        ./nonPositive sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b-      ? ./nonPositive+        ./nonPositive.dhall sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b+      ? ./nonPositive.dhall  let nonNegative     : Integer → Bool
dhall-lang/Prelude/Integer/package.dhall view
@@ -1,55 +1,55 @@ { abs =-      ./abs sha256:35212fcbe1e60cb95b033a4a9c6e45befca4a298aa9919915999d09e69ddced1-    ? ./abs+      ./abs.dhall sha256:35212fcbe1e60cb95b033a4a9c6e45befca4a298aa9919915999d09e69ddced1+    ? ./abs.dhall , add =-      ./add sha256:7da1306a0bf87c5668beead2a1db1b18861e53d7ce1f38057b2964b649f59c3b-    ? ./add+      ./add.dhall sha256:7da1306a0bf87c5668beead2a1db1b18861e53d7ce1f38057b2964b649f59c3b+    ? ./add.dhall , clamp =-      ./clamp sha256:ea42096cf3e024fadfaf910e0b839005b0ea7514fff11e5a3950a77694d9c5d2-    ? ./clamp+      ./clamp.dhall sha256:ea42096cf3e024fadfaf910e0b839005b0ea7514fff11e5a3950a77694d9c5d2+    ? ./clamp.dhall , equal =-      ./equal sha256:2d99a205086aa77eea17ae1dab22c275f3eb007bccdc8d9895b93497ebfc39f8-    ? ./equal+      ./equal.dhall sha256:2d99a205086aa77eea17ae1dab22c275f3eb007bccdc8d9895b93497ebfc39f8+    ? ./equal.dhall , greaterThan =-      ./greaterThan sha256:d23affd73029fc9aaf867c2c7b86510ca2802d3f0d1f3e1d1a93ffd87b7cb64b-    ? ./greaterThan+      ./greaterThan.dhall sha256:d23affd73029fc9aaf867c2c7b86510ca2802d3f0d1f3e1d1a93ffd87b7cb64b+    ? ./greaterThan.dhall , greaterThanEqual =-      ./greaterThanEqual sha256:a9fa2dc5cd6067a23b39d7fe8d14a63109583b320429fb0e446658a5aae0a958-    ? ./greaterThanEqual+      ./greaterThanEqual.dhall sha256:a9fa2dc5cd6067a23b39d7fe8d14a63109583b320429fb0e446658a5aae0a958+    ? ./greaterThanEqual.dhall , lessThan =-      ./lessThan sha256:eeaa0081d10c6c97464ef193c40f1aa5cbb12f0202972ab42f3d310c2fd6a3f0-    ? ./lessThan+      ./lessThan.dhall sha256:eeaa0081d10c6c97464ef193c40f1aa5cbb12f0202972ab42f3d310c2fd6a3f0+    ? ./lessThan.dhall , lessThanEqual =-      ./lessThanEqual sha256:e3cca9f3942f81fa78a2bea23c0c24519c67cfe438116c38e797e12dcd26f6bc-    ? ./lessThanEqual+      ./lessThanEqual.dhall sha256:e3cca9f3942f81fa78a2bea23c0c24519c67cfe438116c38e797e12dcd26f6bc+    ? ./lessThanEqual.dhall , multiply =-      ./multiply sha256:dcb1ed7c8475ece8d67db92cd249fc728541778ff82509e28c3760e341880e4d-    ? ./multiply+      ./multiply.dhall sha256:dcb1ed7c8475ece8d67db92cd249fc728541778ff82509e28c3760e341880e4d+    ? ./multiply.dhall , negate =-      ./negate sha256:2373c992e1de93634bc6a8781eb073b2a92a70170133e49762a785f3a136df5d-    ? ./negate+      ./negate.dhall sha256:2373c992e1de93634bc6a8781eb073b2a92a70170133e49762a785f3a136df5d+    ? ./negate.dhall , negative =-      ./negative sha256:23e4b3c61eea9e878a7f83bf25fd0ea2c6a6d60174890d65be885828b690a570-    ? ./negative+      ./negative.dhall sha256:23e4b3c61eea9e878a7f83bf25fd0ea2c6a6d60174890d65be885828b690a570+    ? ./negative.dhall , nonNegative =-      ./nonNegative sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663-    ? ./nonNegative+      ./nonNegative.dhall sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663+    ? ./nonNegative.dhall , nonPositive =-      ./nonPositive sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b-    ? ./nonPositive+      ./nonPositive.dhall sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b+    ? ./nonPositive.dhall , positive =-      ./positive sha256:7bdbf50fcdb83d01f74c7e2a92bf5c9104eff5d8c5b4587e9337f0caefcfdbe3-    ? ./positive+      ./positive.dhall sha256:7bdbf50fcdb83d01f74c7e2a92bf5c9104eff5d8c5b4587e9337f0caefcfdbe3+    ? ./positive.dhall , show =-      ./show sha256:ecf8b0594cd5181bc45d3b7ea0d44d3ba9ad5dac6ec17bb8968beb65f4b1baa9-    ? ./show+      ./show.dhall sha256:ecf8b0594cd5181bc45d3b7ea0d44d3ba9ad5dac6ec17bb8968beb65f4b1baa9+    ? ./show.dhall , subtract =-      ./subtract sha256:a34d36272fa8ae4f1ec8b56222fe8dc8a2ec55ec6538b840de0cbe207b006fda-    ? ./subtract+      ./subtract.dhall sha256:a34d36272fa8ae4f1ec8b56222fe8dc8a2ec55ec6538b840de0cbe207b006fda+    ? ./subtract.dhall , toDouble =-      ./toDouble sha256:77bc5d635dc4d952f37cc96f2a681d5ac503b4e8b21fc00055b1946adb5beda7-    ? ./toDouble+      ./toDouble.dhall sha256:77bc5d635dc4d952f37cc96f2a681d5ac503b4e8b21fc00055b1946adb5beda7+    ? ./toDouble.dhall , toNatural =-      ./toNatural sha256:4d128730d74e7f832e53873cb5204aa91b79758be5ce4e1aa991fe1951304a0e-    ? ./toNatural+      ./toNatural.dhall sha256:4d128730d74e7f832e53873cb5204aa91b79758be5ce4e1aa991fe1951304a0e+    ? ./toNatural.dhall }
dhall-lang/Prelude/Integer/positive.dhall view
@@ -4,12 +4,12 @@ `positive` is more efficient than `./greaterThan +0` or `./greaterThanEqual +1`. -} let not =-        ../Bool/not sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4-      ? ../Bool/not+        ../Bool/not.dhall sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4+      ? ../Bool/not.dhall  let nonPositive =-        ./nonPositive sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b-      ? ./nonPositive+        ./nonPositive.dhall sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b+      ? ./nonPositive.dhall  let positive     : Integer → Bool
dhall-lang/Prelude/Integer/subtract.dhall view
@@ -1,7 +1,7 @@ --| `subtract m n` computes `n - m`. let nonPositive =-        ./nonPositive sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b-      ? ./nonPositive+        ./nonPositive.dhall sha256:e00a852eed5b84ff60487097d8aadce53c9e5301f53ff4954044bd68949fac3b+      ? ./nonPositive.dhall  let subtractNonNegative =       λ(xi : Integer) →
dhall-lang/Prelude/Integer/toNatural.dhall view
@@ -2,8 +2,8 @@ Convert an `Integer` to an `Optional Natural`, with negative numbers becoming `None Natural`. -} let nonNegative =-        ./nonNegative sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663-      ? ./nonNegative+        ./nonNegative.dhall sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663+      ? ./nonNegative.dhall  let toNatural     : Integer → Optional Natural
dhall-lang/Prelude/JSON/Tagged.dhall view
@@ -65,8 +65,8 @@     = λ(a : Type) →         { field : Text         , nesting :-              ./Nesting sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335-            ? ./Nesting+              ./Nesting.dhall sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335+            ? ./Nesting.dhall         , contents : a         } 
dhall-lang/Prelude/JSON/array.dhall view
@@ -13,12 +13,12 @@ ``` -} let JSON =-        ./Type sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759-      ? ./Type+        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759+      ? ./Type.dhall  let List/map =-        ../List/map sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680-      ? ../List/map+        ../List/map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680+      ? ../List/map.dhall  let array     : List JSON → JSON
dhall-lang/Prelude/JSON/bool.dhall view
@@ -12,8 +12,8 @@ ``` -} let JSON =-        ./Type sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759-      ? ./Type+        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759+      ? ./Type.dhall  let bool     : Bool → JSON
dhall-lang/Prelude/JSON/core.dhall view
@@ -8,47 +8,47 @@ `package.dhall` to avoid import cycles. -} { Type =-      ./Type sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759-    ? ./Type+      ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759+    ? ./Type.dhall , Tagged =-      ./Tagged sha256:21feca7d2b23f210d0696131d792e18a7d24fdcc85d41a49ba85b98670eba194-    ? ./Tagged+      ./Tagged.dhall sha256:21feca7d2b23f210d0696131d792e18a7d24fdcc85d41a49ba85b98670eba194+    ? ./Tagged.dhall , Nesting =-      ./Nesting sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335-    ? ./Nesting+      ./Nesting.dhall sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335+    ? ./Nesting.dhall , keyText =-      ./keyText sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc-    ? ./keyText+      ./keyText.dhall sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc+    ? ./keyText.dhall , keyValue =-      ./keyValue sha256:a0a97199d280c4cce72ffcbbf93b7ceda0a569cf4d173ac98e0aaaa78034b98c-    ? ./keyValue+      ./keyValue.dhall sha256:a0a97199d280c4cce72ffcbbf93b7ceda0a569cf4d173ac98e0aaaa78034b98c+    ? ./keyValue.dhall , string =-      ./string sha256:7ddb3a3b9f3ed09ed011d621a10ad9825185cd03503be98a81d42f6afb77940e-    ? ./string+      ./string.dhall sha256:7ddb3a3b9f3ed09ed011d621a10ad9825185cd03503be98a81d42f6afb77940e+    ? ./string.dhall , number =-      ./number sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32-    ? ./number+      ./number.dhall sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32+    ? ./number.dhall , double =-      ./double sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32-    ? ./double+      ./double.dhall sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32+    ? ./double.dhall , integer =-      ./integer sha256:c81a417397fc6f62155ec71fdd8d2047f981f0881295b307de3dd88747bf7e40-    ? ./integer+      ./integer.dhall sha256:c81a417397fc6f62155ec71fdd8d2047f981f0881295b307de3dd88747bf7e40+    ? ./integer.dhall , natural =-      ./natural sha256:a839dc6789f19f820e9cbf70c60f41f3b057c59ece1d226d04db5aca447eb0e5-    ? ./natural+      ./natural.dhall sha256:a839dc6789f19f820e9cbf70c60f41f3b057c59ece1d226d04db5aca447eb0e5+    ? ./natural.dhall , object =-      ./object sha256:869aede785c34798be9f9fd457ece73e7f683f352ae4555f791516a365faf4ac-    ? ./object+      ./object.dhall sha256:869aede785c34798be9f9fd457ece73e7f683f352ae4555f791516a365faf4ac+    ? ./object.dhall , array =-      ./array sha256:fb6346a9c63638fe3c59f8108e19eebdbddc51389ec5570bab4c25f890ccccc8-    ? ./array+      ./array.dhall sha256:fb6346a9c63638fe3c59f8108e19eebdbddc51389ec5570bab4c25f890ccccc8+    ? ./array.dhall , bool =-      ./bool sha256:e043d9ed01e5b45899059e128243f3dae7ce65f293f0015ce816fc36d30f7f39-    ? ./bool+      ./bool.dhall sha256:e043d9ed01e5b45899059e128243f3dae7ce65f293f0015ce816fc36d30f7f39+    ? ./bool.dhall , null =-      ./null sha256:1eeb9aee38eb8dde0e64efbaf60f24612c8194cc00b510bfb627c2ee2e1877b8-    ? ./null+      ./null.dhall sha256:1eeb9aee38eb8dde0e64efbaf60f24612c8194cc00b510bfb627c2ee2e1877b8+    ? ./null.dhall , renderInteger =       ./renderInteger.dhall sha256:15b8d2ae46d5002832741927af787761df49798c911e2bf85db7a7b9cb5c078c     ? ./renderInteger.dhall
dhall-lang/Prelude/JSON/double.dhall view
@@ -12,8 +12,8 @@ ``` -} let JSON =-        ./Type sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759-      ? ./Type+        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759+      ? ./Type.dhall  let double     : Double → JSON
dhall-lang/Prelude/JSON/integer.dhall view
@@ -12,8 +12,8 @@ ``` -} let JSON =-        ./Type sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759-      ? ./Type+        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759+      ? ./Type.dhall  let integer     : Integer → JSON
dhall-lang/Prelude/JSON/keyText.dhall view
@@ -1,2 +1,2 @@-  ../Map/keyText sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc-? ../Map/keyText+  ../Map/keyText.dhall sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc+? ../Map/keyText.dhall
dhall-lang/Prelude/JSON/keyValue.dhall view
@@ -1,2 +1,2 @@-  ../Map/keyValue sha256:a0a97199d280c4cce72ffcbbf93b7ceda0a569cf4d173ac98e0aaaa78034b98c-? ../Map/keyValue+  ../Map/keyValue.dhall sha256:a0a97199d280c4cce72ffcbbf93b7ceda0a569cf4d173ac98e0aaaa78034b98c+? ../Map/keyValue.dhall
dhall-lang/Prelude/JSON/natural.dhall view
@@ -8,8 +8,8 @@ ``` -} let JSON =-        ./Type sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759-      ? ./Type+        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759+      ? ./Type.dhall  let natural     : Natural → JSON
dhall-lang/Prelude/JSON/null.dhall view
@@ -8,8 +8,8 @@ ``` -} let JSON =-        ./Type sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759-      ? ./Type+        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759+      ? ./Type.dhall  let null     : JSON
dhall-lang/Prelude/JSON/number.dhall view
@@ -12,12 +12,12 @@ ``` -} let JSON =-        ./Type sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759-      ? ./Type+        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759+      ? ./Type.dhall  let double =-        ./double sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32-      ? ./double+        ./double.dhall sha256:e70162c73c4978ad0d0d99505f61c7d990f3abadfcc08b34388b29c0934a7a32+      ? ./double.dhall  let number     : Double → JSON
dhall-lang/Prelude/JSON/object.dhall view
@@ -19,12 +19,12 @@ ``` -} let JSON =-        ./Type sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759-      ? ./Type+        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759+      ? ./Type.dhall  let List/map =-        ../List/map sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680-      ? ../List/map+        ../List/map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680+      ? ../List/map.dhall  let object     : List { mapKey : Text, mapValue : JSON } → JSON
dhall-lang/Prelude/JSON/omitNullFields.dhall view
@@ -7,12 +7,12 @@       ? ./core.dhall  let List/concatMap =-        ../List/concatMap sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64-      ? ../List/concatMap+        ../List/concatMap.dhall sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64+      ? ../List/concatMap.dhall  let List/map =-        ../List/map sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680-      ? ../List/map+        ../List/map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680+      ? ../List/map.dhall  let omitNullFields     : JSON.Type → JSON.Type
dhall-lang/Prelude/JSON/package.dhall view
@@ -1,18 +1,18 @@   { render =-        ./render sha256:b5e5aee66b8fc018b50e1019a76340deafe5f8176854ea3611476d79990785da-      ? ./render+        ./render.dhall sha256:b5e5aee66b8fc018b50e1019a76340deafe5f8176854ea3611476d79990785da+      ? ./render.dhall   , renderYAML =-        ./renderYAML sha256:dad92a120956ae852be7496d1e1955bbf3f60834ab2ad32641269098f2846477-      ? ./renderYAML+        ./renderYAML.dhall sha256:dad92a120956ae852be7496d1e1955bbf3f60834ab2ad32641269098f2846477+      ? ./renderYAML.dhall   , omitNullFields =-        ./omitNullFields sha256:e6850e70094540b75edeb46f4d6038324a62def8d63544a1e9541f79739db6f0-      ? ./omitNullFields+        ./omitNullFields.dhall sha256:e6850e70094540b75edeb46f4d6038324a62def8d63544a1e9541f79739db6f0+      ? ./omitNullFields.dhall   , tagInline =-        ./tagInline sha256:49559ac11906ba6cc9eac25753e31e7addb13bc760df108024174c55523984c4-      ? ./tagInline+        ./tagInline.dhall sha256:49559ac11906ba6cc9eac25753e31e7addb13bc760df108024174c55523984c4+      ? ./tagInline.dhall   , tagNested =-        ./tagNested sha256:93a7415853b7677c832246efadc8e880c1b641a23589286a836a384ca311d26f-      ? ./tagNested+        ./tagNested.dhall sha256:93a7415853b7677c832246efadc8e880c1b641a23589286a836a384ca311d26f+      ? ./tagNested.dhall   } ∧ (   ./core.dhall sha256:5dc1135d5481cfd6fde625aaed9fcbdb7aa7c14f2e76726aa5fdef028a5c10f5     ? ./core.dhall
dhall-lang/Prelude/JSON/render.dhall view
@@ -9,12 +9,12 @@       ? ./core.dhall  let renderAs =-        ./renderAs sha256:5576473c02bc447d40d08bf103aaeca9637c1040367fdf07ff70032ba3e28043-      ? ./renderAs+        ./renderAs.dhall sha256:5576473c02bc447d40d08bf103aaeca9637c1040367fdf07ff70032ba3e28043+      ? ./renderAs.dhall  let Format =-        ./Format sha256:d7936b510cfc091faa994652af0eb5feb889cd44bc989edbe4f1eb8c5623caac-      ? ./Format+        ./Format.dhall sha256:d7936b510cfc091faa994652af0eb5feb889cd44bc989edbe4f1eb8c5623caac+      ? ./Format.dhall  let render     : JSON.Type → Text
dhall-lang/Prelude/JSON/renderAs.dhall view
@@ -5,20 +5,20 @@       ? ./core.dhall  let Function/identity =-        ../Function/identity sha256:f78b96792b459cb664f41c6119bd8897dd04353a3343521d436cd82ad71cb4d4-      ? ../Function/identity+        ../Function/identity.dhall sha256:f78b96792b459cb664f41c6119bd8897dd04353a3343521d436cd82ad71cb4d4+      ? ../Function/identity.dhall  let Text/concatMap =-        ../Text/concatMap sha256:7a0b0b99643de69d6f94ba49441cd0fa0507cbdfa8ace0295f16097af37e226f-      ? ../Text/concatMap+        ../Text/concatMap.dhall sha256:7a0b0b99643de69d6f94ba49441cd0fa0507cbdfa8ace0295f16097af37e226f+      ? ../Text/concatMap.dhall  let List/map =-        ../List/map sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680-      ? ../List/map+        ../List/map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680+      ? ../List/map.dhall  let List/concatMap =-        ../List/concatMap sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64-      ? ../List/concatMap+        ../List/concatMap.dhall sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64+      ? ../List/concatMap.dhall  let NonEmpty     : Type → Type@@ -190,8 +190,8 @@ let indentTail = NonEmpty/mapTail Text addIndent  let Format =-        ./Format sha256:d7936b510cfc091faa994652af0eb5feb889cd44bc989edbe4f1eb8c5623caac-      ? ./Format+        ./Format.dhall sha256:d7936b510cfc091faa994652af0eb5feb889cd44bc989edbe4f1eb8c5623caac+      ? ./Format.dhall  let ObjectField = { mapKey : Text, mapValue : Block } 
dhall-lang/Prelude/JSON/renderInteger.dhall view
@@ -4,8 +4,8 @@ -}  let Integer/nonNegative =-        ../Integer/nonNegative sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663-      ? ../Integer/nonNegative+        ../Integer/nonNegative.dhall sha256:b463373f070df6b1c8c7082051e0810fee38b360bab35256187c8c2b6af5c663+      ? ../Integer/nonNegative.dhall  let renderInteger     : Integer → Text
dhall-lang/Prelude/JSON/renderYAML.dhall view
@@ -14,12 +14,12 @@       ? ./core.dhall  let renderAs =-        ./renderAs sha256:5576473c02bc447d40d08bf103aaeca9637c1040367fdf07ff70032ba3e28043-      ? ./renderAs+        ./renderAs.dhall sha256:5576473c02bc447d40d08bf103aaeca9637c1040367fdf07ff70032ba3e28043+      ? ./renderAs.dhall  let Format =-        ./Format sha256:d7936b510cfc091faa994652af0eb5feb889cd44bc989edbe4f1eb8c5623caac-      ? ./Format+        ./Format.dhall sha256:d7936b510cfc091faa994652af0eb5feb889cd44bc989edbe4f1eb8c5623caac+      ? ./Format.dhall  let renderYAML     : JSON.Type → Text
dhall-lang/Prelude/JSON/string.dhall view
@@ -12,8 +12,8 @@ ``` -} let JSON =-        ./Type sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759-      ? ./Type+        ./Type.dhall sha256:40edbc9371979426df63e064333b02689b969c4cfbbccfa481216d2d1a6e9759+      ? ./Type.dhall  let string     : Text → JSON
dhall-lang/Prelude/JSON/tagInline.dhall view
@@ -1,11 +1,11 @@ --| Prepare a union value for JSON- or YAML-encoding with the inline layout let Nesting =-        ./Nesting sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335-      ? ./Nesting+        ./Nesting.dhall sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335+      ? ./Nesting.dhall  let Tagged =-        ./Tagged sha256:21feca7d2b23f210d0696131d792e18a7d24fdcc85d41a49ba85b98670eba194-      ? ./Tagged+        ./Tagged.dhall sha256:21feca7d2b23f210d0696131d792e18a7d24fdcc85d41a49ba85b98670eba194+      ? ./Tagged.dhall  let tagInline     : Text → ∀(a : Type) → a → Tagged a
dhall-lang/Prelude/JSON/tagNested.dhall view
@@ -1,11 +1,11 @@ --| Prepare a union value for JSON- or YAML-encoding with the nested layout let Nesting =-        ./Nesting sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335-      ? ./Nesting+        ./Nesting.dhall sha256:6284802edd41d5d725aa1ec7687e614e21ad1be7e14dd10996bfa9625105c335+      ? ./Nesting.dhall  let Tagged =-        ./Tagged sha256:21feca7d2b23f210d0696131d792e18a7d24fdcc85d41a49ba85b98670eba194-      ? ./Tagged+        ./Tagged.dhall sha256:21feca7d2b23f210d0696131d792e18a7d24fdcc85d41a49ba85b98670eba194+      ? ./Tagged.dhall  let tagNested     : Text → Text → ∀(a : Type) → a → Tagged a
dhall-lang/Prelude/List/drop.dhall view
@@ -1,7 +1,7 @@ --| Remove first `n` elements of a list let Natural/greaterThanEqual =-        ../Natural/greaterThanEqual sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4-      ? ../Natural/greaterThanEqual+        ../Natural/greaterThanEqual.dhall sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4+      ? ../Natural/greaterThanEqual.dhall  let drop     : ∀(n : Natural) → ∀(a : Type) → List a → List a
dhall-lang/Prelude/List/index.dhall view
@@ -1,7 +1,7 @@ --| Retrieve an element from a `List` using its 0-based index let drop =-        ./drop sha256:af983ba3ead494dd72beed05c0f3a17c36a4244adedf7ced502c6512196ed0cf-      ? ./drop+        ./drop.dhall sha256:af983ba3ead494dd72beed05c0f3a17c36a4244adedf7ced502c6512196ed0cf+      ? ./drop.dhall  let index     : Natural → ∀(a : Type) → List a → Optional a
dhall-lang/Prelude/List/package.dhall view
@@ -1,82 +1,82 @@ { all =-      ./all sha256:7ac5bb6f77e9ffe9e2356d90968d39764a9a32f75980206e6b12f815bb83dd15-    ? ./all+      ./all.dhall sha256:7ac5bb6f77e9ffe9e2356d90968d39764a9a32f75980206e6b12f815bb83dd15+    ? ./all.dhall , any =-      ./any sha256:b8e9e13b25e799f342a81f6eda4075906eb1a19dfdcb10a0ca25925eba4033b8-    ? ./any+      ./any.dhall sha256:b8e9e13b25e799f342a81f6eda4075906eb1a19dfdcb10a0ca25925eba4033b8+    ? ./any.dhall , build =-      ./build sha256:8cf73fc1e115cfcb79bb9cd490bfcbd45c824e93c57a0e64c86c0c72e9ebbe42-    ? ./build+      ./build.dhall sha256:8cf73fc1e115cfcb79bb9cd490bfcbd45c824e93c57a0e64c86c0c72e9ebbe42+    ? ./build.dhall , concat =-      ./concat sha256:54e43278be13276e03bd1afa89e562e94a0a006377ebea7db14c7562b0de292b-    ? ./concat+      ./concat.dhall sha256:54e43278be13276e03bd1afa89e562e94a0a006377ebea7db14c7562b0de292b+    ? ./concat.dhall , concatMap =-      ./concatMap sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64-    ? ./concatMap+      ./concatMap.dhall sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64+    ? ./concatMap.dhall , default =-      ./default sha256:fd77809e497227403f42848ffcda05a3efab442d961027c34f3e31d5d24e6379-    ? ./default+      ./default.dhall sha256:fd77809e497227403f42848ffcda05a3efab442d961027c34f3e31d5d24e6379+    ? ./default.dhall , drop =-      ./drop sha256:af983ba3ead494dd72beed05c0f3a17c36a4244adedf7ced502c6512196ed0cf-    ? ./drop+      ./drop.dhall sha256:af983ba3ead494dd72beed05c0f3a17c36a4244adedf7ced502c6512196ed0cf+    ? ./drop.dhall , empty =-      ./empty sha256:b2f561f35098c457353723c93a22bd5de28d26ecc5370814bef9dfda421e0147-    ? ./empty+      ./empty.dhall sha256:b2f561f35098c457353723c93a22bd5de28d26ecc5370814bef9dfda421e0147+    ? ./empty.dhall , filter =-      ./filter sha256:8ebfede5bbfe09675f246c33eb83964880ac615c4b1be8d856076fdbc4b26ba6-    ? ./filter+      ./filter.dhall sha256:8ebfede5bbfe09675f246c33eb83964880ac615c4b1be8d856076fdbc4b26ba6+    ? ./filter.dhall , fold =-      ./fold sha256:10bb945c25ab3943bd9df5a32e633cbfae112b7d3af38591784687e436a8d814-    ? ./fold+      ./fold.dhall sha256:10bb945c25ab3943bd9df5a32e633cbfae112b7d3af38591784687e436a8d814+    ? ./fold.dhall , generate =-      ./generate sha256:78ff1ad96c08b88a8263eea7bc8381c078225cfcb759c496f792edb5a5e0b1a4-    ? ./generate+      ./generate.dhall sha256:78ff1ad96c08b88a8263eea7bc8381c078225cfcb759c496f792edb5a5e0b1a4+    ? ./generate.dhall , head =-      ./head sha256:0d2e65ba0aea908377e46d22020dc3ad970284f4ee4eb8e6b8c51e53038c0026-    ? ./head+      ./head.dhall sha256:0d2e65ba0aea908377e46d22020dc3ad970284f4ee4eb8e6b8c51e53038c0026+    ? ./head.dhall , index =-      ./index sha256:e657b55ecae4d899465c3032cb1a64c6aa6dc2aa3034204f3c15ce5c96c03e63-    ? ./index+      ./index.dhall sha256:e657b55ecae4d899465c3032cb1a64c6aa6dc2aa3034204f3c15ce5c96c03e63+    ? ./index.dhall , indexed =-      ./indexed sha256:58bb44457fa81adf26f5123c1b2e8bef0c5aa22dac5fa5ebdfb7da84563b027f-    ? ./indexed+      ./indexed.dhall sha256:58bb44457fa81adf26f5123c1b2e8bef0c5aa22dac5fa5ebdfb7da84563b027f+    ? ./indexed.dhall , iterate =-      ./iterate sha256:e4999ccce190a2e2a6ab9cb188e3af6c40df474087827153005293f11bfe1d26-    ? ./iterate+      ./iterate.dhall sha256:e4999ccce190a2e2a6ab9cb188e3af6c40df474087827153005293f11bfe1d26+    ? ./iterate.dhall , last =-      ./last sha256:741226b741af152a1638491cdff7f3aa74baf080ada2e63429483f3d195a984d-    ? ./last+      ./last.dhall sha256:741226b741af152a1638491cdff7f3aa74baf080ada2e63429483f3d195a984d+    ? ./last.dhall , length =-      ./length sha256:42c6812c7a9e3c6e6fad88f77c5b3849503964e071cb784e22c38c888a401461-    ? ./length+      ./length.dhall sha256:42c6812c7a9e3c6e6fad88f77c5b3849503964e071cb784e22c38c888a401461+    ? ./length.dhall , map =-      ./map sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680-    ? ./map+      ./map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680+    ? ./map.dhall , null =-      ./null sha256:2338e39637e9a50d66ae1482c0ed559bbcc11e9442bfca8f8c176bbcd9c4fc80-    ? ./null+      ./null.dhall sha256:2338e39637e9a50d66ae1482c0ed559bbcc11e9442bfca8f8c176bbcd9c4fc80+    ? ./null.dhall , partition =-      ./partition sha256:38147ac6d750a6492736dd90cc967bf09aa405c499de943c64fab7b86ae02f03-    ? ./partition+      ./partition.dhall sha256:38147ac6d750a6492736dd90cc967bf09aa405c499de943c64fab7b86ae02f03+    ? ./partition.dhall , replicate =-      ./replicate sha256:d4250b45278f2d692302489ac3e78280acb238d27541c837ce46911ff3baa347-    ? ./replicate+      ./replicate.dhall sha256:d4250b45278f2d692302489ac3e78280acb238d27541c837ce46911ff3baa347+    ? ./replicate.dhall , reverse =-      ./reverse sha256:ad99d224d61852de6696da5a7d04c98dbe676fe67d5e4ef4f19e9aaa27006e9d-    ? ./reverse+      ./reverse.dhall sha256:ad99d224d61852de6696da5a7d04c98dbe676fe67d5e4ef4f19e9aaa27006e9d+    ? ./reverse.dhall , shifted =-      ./shifted sha256:54fb22c7e952ebce1cfc0fcdd33ce4cfa817bff9d6564af268dea6685f8b5dfe-    ? ./shifted+      ./shifted.dhall sha256:54fb22c7e952ebce1cfc0fcdd33ce4cfa817bff9d6564af268dea6685f8b5dfe+    ? ./shifted.dhall , take =-      ./take sha256:b3e08ee8c3a5bf3d8ccee6b2b2008fbb8e51e7373aef6f1af67ad10078c9fbfa-    ? ./take+      ./take.dhall sha256:b3e08ee8c3a5bf3d8ccee6b2b2008fbb8e51e7373aef6f1af67ad10078c9fbfa+    ? ./take.dhall , unpackOptionals =-      ./unpackOptionals sha256:0cbaa920f429cf7fc3907f8a9143203fe948883913560e6e1043223e6b3d05e4-    ? ./unpackOptionals+      ./unpackOptionals.dhall sha256:0cbaa920f429cf7fc3907f8a9143203fe948883913560e6e1043223e6b3d05e4+    ? ./unpackOptionals.dhall , unzip =-      ./unzip sha256:4d6003e9e683a289fe33f4c90f958eb1e08ea0bbb474210fcd90d1885c9660e9-    ? ./unzip+      ./unzip.dhall sha256:4d6003e9e683a289fe33f4c90f958eb1e08ea0bbb474210fcd90d1885c9660e9+    ? ./unzip.dhall , zip =-      ./zip sha256:85ed955eabf3998767f4ad2a28e57d40cd4c68a95519d79e9b622f1d26d979da-    ? ./zip+      ./zip.dhall sha256:85ed955eabf3998767f4ad2a28e57d40cd4c68a95519d79e9b622f1d26d979da+    ? ./zip.dhall }
dhall-lang/Prelude/List/take.dhall view
@@ -1,7 +1,7 @@ --| Truncate a list to the first `n` elements let Natural/lessThan =-        ../Natural/lessThan sha256:3381b66749290769badf8855d8a3f4af62e8de52d1364d838a9d1e20c94fa70c-      ? ../Natural/lessThan+        ../Natural/lessThan.dhall sha256:3381b66749290769badf8855d8a3f4af62e8de52d1364d838a9d1e20c94fa70c+      ? ../Natural/lessThan.dhall  let take     : ∀(n : Natural) → ∀(a : Type) → List a → List a
dhall-lang/Prelude/List/unpackOptionals.dhall view
@@ -1,12 +1,12 @@ --| Unpack Optionals in a List, omitting None items.  let List/concatMap =-        ./concatMap sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64-      ? ./concatMap+        ./concatMap.dhall sha256:3b2167061d11fda1e4f6de0522cbe83e0d5ac4ef5ddf6bb0b2064470c5d3fb64+      ? ./concatMap.dhall  let Optional/toList =-        ../Optional/toList sha256:d78f160c619119ef12389e48a629ce293d69f7624c8d016b7a4767ab400344c4-      ? ../Optional/toList+        ../Optional/toList.dhall sha256:d78f160c619119ef12389e48a629ce293d69f7624c8d016b7a4767ab400344c4+      ? ../Optional/toList.dhall  let unpackOptionals     : ∀(a : Type) → ∀(l : List (Optional a)) → List a
dhall-lang/Prelude/List/zip.dhall view
@@ -4,8 +4,8 @@ The resulting `List` will have the length of the shortest of its arguments. -} let List/index =-        ./index sha256:e657b55ecae4d899465c3032cb1a64c6aa6dc2aa3034204f3c15ce5c96c03e63-      ? ./index+        ./index.dhall sha256:e657b55ecae4d899465c3032cb1a64c6aa6dc2aa3034204f3c15ce5c96c03e63+      ? ./index.dhall  let zip     : ∀(a : Type) → List a → ∀(b : Type) → List b → List { _1 : a, _2 : b }
dhall-lang/Prelude/Location/package.dhall view
@@ -1,4 +1,4 @@ { Type =-      ./Type sha256:613ebb491aeef4ff06368058b4f0e6e3bb8a58d8c145131fc0b947aac045a529-    ? ./Type+      ./Type.dhall sha256:613ebb491aeef4ff06368058b4f0e6e3bb8a58d8c145131fc0b947aac045a529+    ? ./Type.dhall }
dhall-lang/Prelude/Map/empty.dhall view
@@ -1,7 +1,7 @@ --| An empty `Map` of the given key and value types let Map =-        ./Type sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed-      ? ./Type+        ./Type.dhall sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed+      ? ./Type.dhall  let empty     : ∀(k : Type) → ∀(v : Type) → Map k v
dhall-lang/Prelude/Map/keys.dhall view
@@ -1,11 +1,11 @@ --| Get all of the keys of a `Map` as a `List` let Map =-        ./Type sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed-      ? ./Type+        ./Type.dhall sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed+      ? ./Type.dhall  let Entry =-        ./Entry sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346-      ? ./Entry+        ./Entry.dhall sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346+      ? ./Entry.dhall  let List/map =         ../List/map sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680
dhall-lang/Prelude/Map/map.dhall view
@@ -1,15 +1,15 @@ --| Transform a `Map` by applying a function to each value let Map =-        ./Type sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed-      ? ./Type+        ./Type.dhall sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed+      ? ./Type.dhall  let Entry =-        ./Entry sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346-      ? ./Entry+        ./Entry.dhall sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346+      ? ./Entry.dhall  let List/map =-        ../List/map sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680-      ? ../List/map+        ../List/map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680+      ? ../List/map.dhall  let map     : ∀(k : Type) → ∀(a : Type) → ∀(b : Type) → (a → b) → Map k a → Map k b
dhall-lang/Prelude/Map/package.dhall view
@@ -19,6 +19,9 @@ , map =       ./map sha256:23e09b0b9f08649797dfe1ca39755d5e1c7cad2d0944bdd36c7a0bf804bde8d0     ? ./map+, unpackOptionals =+      ./unpackOptionals.dhall sha256:66c3e6f6f81418cf99342e1dba739617c01af4b27c1ca5e2e1d7bce64a522e22+    ? ./unpackOptionals.dhall , values =       ./values sha256:ae02cfb06a9307cbecc06130e84fd0c7b96b7f1f11648961e1b030ec00940be8     ? ./values
+ dhall-lang/Prelude/Map/unpackOptionals.dhall view
@@ -0,0 +1,39 @@+--| 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++let Map/Entry =+        ./Entry.dhall sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346+      ? ./Entry.dhall++let Map/Type =+        ./Type.dhall sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed+      ? ./Type.dhall++let unpackOptionals+    : ∀(k : Type) → ∀(v : Type) → Map/Type k (Optional v) → Map/Type k v+    = λ(k : Type) →+      λ(v : Type) →+        List/concatMap+          (Map/Entry k (Optional v))+          (Map/Entry k v)+          ( λ(e : Map/Entry k (Optional v)) →+              merge+                { None = [] : Map/Type k v+                , Some = λ(v : v) → [ { mapKey = e.mapKey, mapValue = v } ]+                }+                e.mapValue+          )++let example0 =+        assert+      :   unpackOptionals+            Text+            Text+            (toMap { foo = Some "bar", baz = None Text })+        ≡ toMap { foo = "bar" }++in  unpackOptionals
dhall-lang/Prelude/Map/values.dhall view
@@ -1,15 +1,15 @@ --| Get all of the values of a `Map` as a `List` let Map =-        ./Type sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed-      ? ./Type+        ./Type.dhall sha256:210c7a9eba71efbb0f7a66b3dcf8b9d3976ffc2bc0e907aadfb6aa29c333e8ed+      ? ./Type.dhall  let Entry =-        ./Entry sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346-      ? ./Entry+        ./Entry.dhall sha256:f334283bdd9cd88e6ea510ca914bc221fc2dab5fb424d24514b2e0df600d5346+      ? ./Entry.dhall  let List/map =-        ../List/map sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680-      ? ../List/map+        ../List/map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680+      ? ../List/map.dhall  let values     : ∀(k : Type) → ∀(v : Type) → Map k v → List v
dhall-lang/Prelude/Natural/equal.dhall view
@@ -1,7 +1,7 @@ --| `equal` checks if two Naturals are equal. let lessThanEqual =-        ./lessThanEqual sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99-      ? ./lessThanEqual+        ./lessThanEqual.dhall sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99+      ? ./lessThanEqual.dhall  let equal     : Natural → Natural → Bool
dhall-lang/Prelude/Natural/greaterThan.dhall view
@@ -1,7 +1,7 @@ --| `greaterThan` checks if one Natural is strictly greater than another. let lessThan =-        ./lessThan sha256:3381b66749290769badf8855d8a3f4af62e8de52d1364d838a9d1e20c94fa70c-      ? ./lessThan+        ./lessThan.dhall sha256:3381b66749290769badf8855d8a3f4af62e8de52d1364d838a9d1e20c94fa70c+      ? ./lessThan.dhall  let greaterThan     : Natural → Natural → Bool
dhall-lang/Prelude/Natural/greaterThanEqual.dhall view
@@ -2,8 +2,8 @@ `greaterThanEqual` checks if one Natural is greater than or equal to another. -} let lessThanEqual =-        ./lessThanEqual sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99-      ? ./lessThanEqual+        ./lessThanEqual.dhall sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99+      ? ./lessThanEqual.dhall  let greaterThanEqual     : Natural → Natural → Bool
dhall-lang/Prelude/Natural/lessThan.dhall view
@@ -1,11 +1,11 @@ --| `lessThan` checks if one Natural is strictly less than another. let greaterThanEqual =-        ./greaterThanEqual sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4-      ? ./greaterThanEqual+        ./greaterThanEqual.dhall sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4+      ? ./greaterThanEqual.dhall  let Bool/not =-        ../Bool/not sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4-      ? ../Bool/not+        ../Bool/not.dhall sha256:723df402df24377d8a853afed08d9d69a0a6d86e2e5b2bac8960b0d4756c7dc4+      ? ../Bool/not.dhall  let lessThan     : Natural → Natural → Bool
dhall-lang/Prelude/Natural/listMax.dhall view
@@ -3,12 +3,12 @@ `List` is empty -} let max =-        ./max sha256:1f3b18da330223ab039fad11693da72c7e68d516f50502c73f41a89a097b62f7-      ? ./max+        ./max.dhall sha256:1f3b18da330223ab039fad11693da72c7e68d516f50502c73f41a89a097b62f7+      ? ./max.dhall  let Optional/map =-        ../Optional/map sha256:501534192d988218d43261c299cc1d1e0b13d25df388937add784778ab0054fa-      ? ../Optional/map+        ../Optional/map.dhall sha256:501534192d988218d43261c299cc1d1e0b13d25df388937add784778ab0054fa+      ? ../Optional/map.dhall  let listMax     : List Natural → Optional Natural
dhall-lang/Prelude/Natural/listMin.dhall view
@@ -3,12 +3,12 @@ `List` is empty -} let min =-        ./min sha256:f25f9c462e4dbf0eb15f9ff6ac840c6e9c82255a7f4f2ab408bdab338e028710-      ? ./min+        ./min.dhall sha256:f25f9c462e4dbf0eb15f9ff6ac840c6e9c82255a7f4f2ab408bdab338e028710+      ? ./min.dhall  let Optional/map =-        ../Optional/map sha256:501534192d988218d43261c299cc1d1e0b13d25df388937add784778ab0054fa-      ? ../Optional/map+        ../Optional/map.dhall sha256:501534192d988218d43261c299cc1d1e0b13d25df388937add784778ab0054fa+      ? ../Optional/map.dhall  let listMin     : List Natural → Optional Natural
dhall-lang/Prelude/Natural/max.dhall view
@@ -1,7 +1,7 @@ --| `max a b` returns the larger of `a` or `b` let lessThanEqual =-        ./lessThanEqual sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99-      ? ./lessThanEqual+        ./lessThanEqual.dhall sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99+      ? ./lessThanEqual.dhall  let max     : Natural → Natural → Natural
dhall-lang/Prelude/Natural/min.dhall view
@@ -1,7 +1,7 @@ --| `min a b` returns the smaller of `a` or `b` let lessThanEqual =-        ./lessThanEqual sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99-      ? ./lessThanEqual+        ./lessThanEqual.dhall sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99+      ? ./lessThanEqual.dhall  let min     : Natural → Natural → Natural
dhall-lang/Prelude/Natural/package.dhall view
@@ -1,67 +1,67 @@ { build =-      ./build sha256:e7e25e6c4f1d8e573606ed1bef725396ac2de5c68f7c5d329ffc5822085b984c-    ? ./build+      ./build.dhall sha256:e7e25e6c4f1d8e573606ed1bef725396ac2de5c68f7c5d329ffc5822085b984c+    ? ./build.dhall , enumerate =-      ./enumerate sha256:0cf083980a752b21ce0df9fc2222a4c139f50909e2353576e26a191002aa1ce3-    ? ./enumerate+      ./enumerate.dhall sha256:0cf083980a752b21ce0df9fc2222a4c139f50909e2353576e26a191002aa1ce3+    ? ./enumerate.dhall , even =-      ./even sha256:b85b8b56892dfef881e1c0e79eade0b949528f792aac0ea42432b315ede4ee66-    ? ./even+      ./even.dhall sha256:b85b8b56892dfef881e1c0e79eade0b949528f792aac0ea42432b315ede4ee66+    ? ./even.dhall , fold =-      ./fold sha256:fd01c931e585a8f5fd049af7b076b862ea164f1813b34800c7616a49e549ee06-    ? ./fold+      ./fold.dhall sha256:fd01c931e585a8f5fd049af7b076b862ea164f1813b34800c7616a49e549ee06+    ? ./fold.dhall , isZero =-      ./isZero sha256:1be98236800ed2d5cff44f16ca02b34b0c37dfa239d9e0d63d9d2c6eeae3d1d1-    ? ./isZero+      ./isZero.dhall sha256:1be98236800ed2d5cff44f16ca02b34b0c37dfa239d9e0d63d9d2c6eeae3d1d1+    ? ./isZero.dhall , odd =-      ./odd sha256:ab3c729262c642ec1cdb72a81e910fcfaf2aea13e3961d0bf1bec83efea5aac5-    ? ./odd+      ./odd.dhall sha256:ab3c729262c642ec1cdb72a81e910fcfaf2aea13e3961d0bf1bec83efea5aac5+    ? ./odd.dhall , product =-      ./product sha256:e3e6fd76207875b81d39f79fdbc90b5e640444c04fb3d84c2c9326748f0b26e6-    ? ./product+      ./product.dhall sha256:e3e6fd76207875b81d39f79fdbc90b5e640444c04fb3d84c2c9326748f0b26e6+    ? ./product.dhall , sum =-      ./sum sha256:33f7f4c3aff62e5ecf4848f964363133452d420dcde045784518fb59fa970037-    ? ./sum+      ./sum.dhall sha256:33f7f4c3aff62e5ecf4848f964363133452d420dcde045784518fb59fa970037+    ? ./sum.dhall , show =-      ./show sha256:684ed560ad86f438efdea229eca122c29e8e14f397ed32ec97148d578ca5aa21-    ? ./show+      ./show.dhall sha256:684ed560ad86f438efdea229eca122c29e8e14f397ed32ec97148d578ca5aa21+    ? ./show.dhall , toDouble =-      ./toDouble sha256:d5eb52143dcd35b46a6f0cdb2d3cbf31a14b6daeba56e29066f8e344c9fb6e81-    ? ./toDouble+      ./toDouble.dhall sha256:d5eb52143dcd35b46a6f0cdb2d3cbf31a14b6daeba56e29066f8e344c9fb6e81+    ? ./toDouble.dhall , toInteger =-      ./toInteger sha256:160d2d278619f3da34a1f4f02e739a447e4f2aa5a2978c45b710515b41491e1f-    ? ./toInteger+      ./toInteger.dhall sha256:160d2d278619f3da34a1f4f02e739a447e4f2aa5a2978c45b710515b41491e1f+    ? ./toInteger.dhall , lessThan =-      ./lessThan sha256:3381b66749290769badf8855d8a3f4af62e8de52d1364d838a9d1e20c94fa70c-    ? ./lessThan+      ./lessThan.dhall sha256:3381b66749290769badf8855d8a3f4af62e8de52d1364d838a9d1e20c94fa70c+    ? ./lessThan.dhall , lessThanEqual =-      ./lessThanEqual sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99-    ? ./lessThanEqual+      ./lessThanEqual.dhall sha256:1a5caa2b80a42b9f58fff58e47ac0d9a9946d0b2d36c54034b8ddfe3cb0f3c99+    ? ./lessThanEqual.dhall , equal =-      ./equal sha256:7f108edfa35ddc7cebafb24dc073478e93a802e13b5bc3fd22f4768c9b066e60-    ? ./equal+      ./equal.dhall sha256:7f108edfa35ddc7cebafb24dc073478e93a802e13b5bc3fd22f4768c9b066e60+    ? ./equal.dhall , greaterThanEqual =-      ./greaterThanEqual sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4-    ? ./greaterThanEqual+      ./greaterThanEqual.dhall sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4+    ? ./greaterThanEqual.dhall , greaterThan =-      ./greaterThan sha256:f702abcdfcd7ad73619b9285d7e41c3a1d017fb6b8d037cf40bd93bf30c09b2c-    ? ./greaterThan+      ./greaterThan.dhall sha256:f702abcdfcd7ad73619b9285d7e41c3a1d017fb6b8d037cf40bd93bf30c09b2c+    ? ./greaterThan.dhall , min =-      ./min sha256:f25f9c462e4dbf0eb15f9ff6ac840c6e9c82255a7f4f2ab408bdab338e028710-    ? ./min+      ./min.dhall sha256:f25f9c462e4dbf0eb15f9ff6ac840c6e9c82255a7f4f2ab408bdab338e028710+    ? ./min.dhall , max =-      ./max sha256:1f3b18da330223ab039fad11693da72c7e68d516f50502c73f41a89a097b62f7-    ? ./max+      ./max.dhall sha256:1f3b18da330223ab039fad11693da72c7e68d516f50502c73f41a89a097b62f7+    ? ./max.dhall , listMin =-      ./listMin sha256:ee70b0d010bbca6012162e8ae1f6e9d9bd10a152675509b0f23145b98b5d43c6-    ? ./listMin+      ./listMin.dhall sha256:ee70b0d010bbca6012162e8ae1f6e9d9bd10a152675509b0f23145b98b5d43c6+    ? ./listMin.dhall , listMax =-      ./listMax sha256:20906ffcc9970f740106d4516cb7868b43d75ff8c9f00ff8a9680ae68c48a472-    ? ./listMax+      ./listMax.dhall sha256:20906ffcc9970f740106d4516cb7868b43d75ff8c9f00ff8a9680ae68c48a472+    ? ./listMax.dhall , sort =-      ./sort sha256:36ce8b3e5538454763987ca904d8d7c5ba34c2147434a19eddd51f684432b260-    ? ./sort+      ./sort.dhall sha256:36ce8b3e5538454763987ca904d8d7c5ba34c2147434a19eddd51f684432b260+    ? ./sort.dhall , subtract =-      ./subtract sha256:b9277ac637d09142a3a3ac79137ef5955c42f8b33b6746d59db2c9d75ccdd745-    ? ./subtract+      ./subtract.dhall sha256:b9277ac637d09142a3a3ac79137ef5955c42f8b33b6746d59db2c9d75ccdd745+    ? ./subtract.dhall }
dhall-lang/Prelude/Natural/sort.dhall view
@@ -1,15 +1,15 @@ --| `sort` sorts a `List` of `Natural`s in ascending order let greaterThanEqual =-        ./greaterThanEqual sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4-      ? ./greaterThanEqual+        ./greaterThanEqual.dhall sha256:30ebfab0febd7aa0ccccfdf3dc36ee6d50f0117f35dd4a9b034750b7e885a1a4+      ? ./greaterThanEqual.dhall  let listMin =-        ./listMin sha256:ee70b0d010bbca6012162e8ae1f6e9d9bd10a152675509b0f23145b98b5d43c6-      ? ./listMin+        ./listMin.dhall sha256:ee70b0d010bbca6012162e8ae1f6e9d9bd10a152675509b0f23145b98b5d43c6+      ? ./listMin.dhall  let List/partition =-        ../List/partition sha256:38147ac6d750a6492736dd90cc967bf09aa405c499de943c64fab7b86ae02f03-      ? ../List/partition+        ../List/partition.dhall sha256:38147ac6d750a6492736dd90cc967bf09aa405c499de943c64fab7b86ae02f03+      ? ../List/partition.dhall  let Accumulator = { sorted : List Natural, rest : List Natural } 
dhall-lang/Prelude/Optional/package.dhall view
@@ -1,43 +1,43 @@ { all =-      ./all sha256:a303004b6def0a2a05bf5f0a8d54e84dd45d8bef581789186ac04924956a1695-    ? ./all+      ./all.dhall sha256:a303004b6def0a2a05bf5f0a8d54e84dd45d8bef581789186ac04924956a1695+    ? ./all.dhall , any =-      ./any sha256:96a5cf4f31b3c598b09161dd3082f0a09f4328a4cefda6a7e09894b37b17b435-    ? ./any+      ./any.dhall sha256:96a5cf4f31b3c598b09161dd3082f0a09f4328a4cefda6a7e09894b37b17b435+    ? ./any.dhall , build =-      ./build sha256:28e61294bf2dd59dc57cf74f719d1568e60b5ba46c28eac586bc937eff4a2af1-    ? ./build+      ./build.dhall sha256:28e61294bf2dd59dc57cf74f719d1568e60b5ba46c28eac586bc937eff4a2af1+    ? ./build.dhall , concat =-      ./concat sha256:b7736bd3ebeab14c3912dfb534d0c970a025b001d06c2d5461d4b0e289e3cb7a-    ? ./concat+      ./concat.dhall sha256:b7736bd3ebeab14c3912dfb534d0c970a025b001d06c2d5461d4b0e289e3cb7a+    ? ./concat.dhall , default =-      ./default sha256:5bd665b0d6605c374b3c4a7e2e2bd3b9c1e39323d41441149ed5e30d86e889ad-    ? ./default+      ./default.dhall sha256:5bd665b0d6605c374b3c4a7e2e2bd3b9c1e39323d41441149ed5e30d86e889ad+    ? ./default.dhall , filter =-      ./filter sha256:54f0a487d578801819613fe000050c038c632edf1f9ccc57677e98ae0ef56b83-    ? ./filter+      ./filter.dhall sha256:54f0a487d578801819613fe000050c038c632edf1f9ccc57677e98ae0ef56b83+    ? ./filter.dhall , fold =-      ./fold sha256:c5b9d72f6f62bdaa0e196ac1c742cc175cd67a717b880fb8aec1333a5a4132cf-    ? ./fold+      ./fold.dhall sha256:c5b9d72f6f62bdaa0e196ac1c742cc175cd67a717b880fb8aec1333a5a4132cf+    ? ./fold.dhall , head =-      ./head sha256:4f256c9338b60a1933f41f2a8fafd861930a1e41770a644cdbac0622676fa34c-    ? ./head+      ./head.dhall sha256:4f256c9338b60a1933f41f2a8fafd861930a1e41770a644cdbac0622676fa34c+    ? ./head.dhall , last =-      ./last sha256:50400771ae19e9b75efa6581feec318ae1ade0b6a60e215df428c66c4b052707-    ? ./last+      ./last.dhall sha256:50400771ae19e9b75efa6581feec318ae1ade0b6a60e215df428c66c4b052707+    ? ./last.dhall , length =-      ./length sha256:f168337c5244ded68c05ecf32ce068b6b87158881d07e87b8cb6853fc6982a85-    ? ./length+      ./length.dhall sha256:f168337c5244ded68c05ecf32ce068b6b87158881d07e87b8cb6853fc6982a85+    ? ./length.dhall , map =-      ./map sha256:501534192d988218d43261c299cc1d1e0b13d25df388937add784778ab0054fa-    ? ./map+      ./map.dhall sha256:501534192d988218d43261c299cc1d1e0b13d25df388937add784778ab0054fa+    ? ./map.dhall , null =-      ./null sha256:3871180b87ecaba8b53fffb2a8b52d3fce98098fab09a6f759358b9e8042eedc-    ? ./null+      ./null.dhall sha256:3871180b87ecaba8b53fffb2a8b52d3fce98098fab09a6f759358b9e8042eedc+    ? ./null.dhall , toList =-      ./toList sha256:d78f160c619119ef12389e48a629ce293d69f7624c8d016b7a4767ab400344c4-    ? ./toList+      ./toList.dhall sha256:d78f160c619119ef12389e48a629ce293d69f7624c8d016b7a4767ab400344c4+    ? ./toList.dhall , unzip =-      ./unzip sha256:d016c01ba91657a2f35609aa29087963d0f506bab0f41d5e8b7cd289dff39708-    ? ./unzip+      ./unzip.dhall sha256:d016c01ba91657a2f35609aa29087963d0f506bab0f41d5e8b7cd289dff39708+    ? ./unzip.dhall }
dhall-lang/Prelude/Text/package.dhall view
@@ -1,28 +1,28 @@ { concat =-      ./concat sha256:731265b0288e8a905ecff95c97333ee2db614c39d69f1514cb8eed9259745fc0-    ? ./concat+      ./concat.dhall sha256:731265b0288e8a905ecff95c97333ee2db614c39d69f1514cb8eed9259745fc0+    ? ./concat.dhall , concatMap =-      ./concatMap sha256:7a0b0b99643de69d6f94ba49441cd0fa0507cbdfa8ace0295f16097af37e226f-    ? ./concatMap+      ./concatMap.dhall sha256:7a0b0b99643de69d6f94ba49441cd0fa0507cbdfa8ace0295f16097af37e226f+    ? ./concatMap.dhall , concatMapSep =-      ./concatMapSep sha256:c272aca80a607bc5963d1fcb38819e7e0d3e72ac4d02b1183b1afb6a91340840-    ? ./concatMapSep+      ./concatMapSep.dhall sha256:c272aca80a607bc5963d1fcb38819e7e0d3e72ac4d02b1183b1afb6a91340840+    ? ./concatMapSep.dhall , concatSep =-      ./concatSep sha256:e4401d69918c61b92a4c0288f7d60a6560ca99726138ed8ebc58dca2cd205e58-    ? ./concatSep+      ./concatSep.dhall sha256:e4401d69918c61b92a4c0288f7d60a6560ca99726138ed8ebc58dca2cd205e58+    ? ./concatSep.dhall , default =-      ./default sha256:f532c8891b1e427d90a6cc07cf7e793a4c84b0765e1bfe69f186ee2ec91c1edf-    ? ./default+      ./default.dhall sha256:f532c8891b1e427d90a6cc07cf7e793a4c84b0765e1bfe69f186ee2ec91c1edf+    ? ./default.dhall , defaultMap =-      ./defaultMap sha256:3a3fa1264f6198800c27483cb144de2c5366484876d60b9c739a710ce0288588-    ? ./defaultMap+      ./defaultMap.dhall sha256:3a3fa1264f6198800c27483cb144de2c5366484876d60b9c739a710ce0288588+    ? ./defaultMap.dhall , replicate =-      ./replicate sha256:1b398b1d464b3a6c7264a690ac3cacb443b5683b43348c859d68e7c2cb925c4f-    ? ./replicate+      ./replicate.dhall sha256:1b398b1d464b3a6c7264a690ac3cacb443b5683b43348c859d68e7c2cb925c4f+    ? ./replicate.dhall , show =-      ./show sha256:c9dc5de3e5f32872dbda57166804865e5e80785abe358ff61f1d8ac45f1f4784-    ? ./show+      ./show.dhall sha256:c9dc5de3e5f32872dbda57166804865e5e80785abe358ff61f1d8ac45f1f4784+    ? ./show.dhall , spaces =-      ./spaces sha256:fccfd4f26601e006bf6a79ca948dbd37c676cdd0db439554447320293d23b3dc-    ? ./spaces+      ./spaces.dhall sha256:fccfd4f26601e006bf6a79ca948dbd37c676cdd0db439554447320293d23b3dc+    ? ./spaces.dhall }
+ dhall-lang/Prelude/Text/replace.dhall view
@@ -0,0 +1,14 @@+{-+Replace a section of `Text` with another inside a `Text` literal.+-}+let replace+    : ∀(needle : Text) → ∀(replacement : Text) → ∀(haystack : Text) → Text+    = Text/replace++let example0 = assert : replace "-" "_" "foo-bar" ≡ "foo_bar"++let example1 = assert : replace "💣" "💥" "💣💣💣" ≡ "💥💥💥"++let example2 = assert : replace "👨" "👩" "👨‍👩‍👧‍👦" ≡ "👩‍👩‍👧‍👦"++in  replace
dhall-lang/Prelude/Text/replicate.dhall view
@@ -1,12 +1,12 @@ --| Build a Text by copying the given Text the specified number of times  let concat =-        ./concat sha256:731265b0288e8a905ecff95c97333ee2db614c39d69f1514cb8eed9259745fc0-      ? ./concat+        ./concat.dhall sha256:731265b0288e8a905ecff95c97333ee2db614c39d69f1514cb8eed9259745fc0+      ? ./concat.dhall  let List/replicate =-        ../List/replicate sha256:d4250b45278f2d692302489ac3e78280acb238d27541c837ce46911ff3baa347-      ? ../List/replicate+        ../List/replicate.dhall sha256:d4250b45278f2d692302489ac3e78280acb238d27541c837ce46911ff3baa347+      ? ../List/replicate.dhall  let replicate     : Natural → Text → Text
dhall-lang/Prelude/Text/spaces.dhall view
@@ -6,8 +6,8 @@ -}  let replicate =-        ./replicate sha256:1b398b1d464b3a6c7264a690ac3cacb443b5683b43348c859d68e7c2cb925c4f-      ? ./replicate+        ./replicate.dhall sha256:1b398b1d464b3a6c7264a690ac3cacb443b5683b43348c859d68e7c2cb925c4f+      ? ./replicate.dhall  let spaces     : Natural → Text
dhall-lang/Prelude/XML/element.dhall view
@@ -21,12 +21,12 @@   let XML =-        ./Type sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c-      ? ./Type+        ./Type.dhall sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c+      ? ./Type.dhall  let List/map =-        ../List/map sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680-      ? ../List/map+        ../List/map.dhall sha256:dd845ffb4568d40327f2a817eb42d1c6138b929ca758d50bc33112ef3c885680+      ? ../List/map.dhall  let Args =         { attributes : List { mapKey : Text, mapValue : Text }
dhall-lang/Prelude/XML/leaf.dhall view
@@ -11,12 +11,12 @@ -}  let XML =-        ./Type sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c-      ? ./Type+        ./Type.dhall sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c+      ? ./Type.dhall  let element =-        ./element sha256:e0b948053c8cd8ccca9c39244d89e3f42db43d222531c18151551dfc75208b4b-      ? ./element+        ./element.dhall sha256:e0b948053c8cd8ccca9c39244d89e3f42db43d222531c18151551dfc75208b4b+      ? ./element.dhall  let leaf     : { attributes : List { mapKey : Text, mapValue : Text }, name : Text } →
dhall-lang/Prelude/XML/package.dhall view
@@ -1,22 +1,22 @@ { Type =-      ./Type sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c-    ? ./Type+      ./Type.dhall sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c+    ? ./Type.dhall , attribute =-      ./attribute sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc-    ? ./attribute+      ./attribute.dhall sha256:f7b6c802ca5764d03d5e9a6e48d9cb167c01392f775d9c2c87b83cdaa60ea0cc+    ? ./attribute.dhall , render =-      ./render sha256:8d034f7f97cded14a96147565d489be840e5678480d175b962b2600d85a3230e-    ? ./render+      ./render.dhall sha256:8d034f7f97cded14a96147565d489be840e5678480d175b962b2600d85a3230e+    ? ./render.dhall , element =-      ./element sha256:e0b948053c8cd8ccca9c39244d89e3f42db43d222531c18151551dfc75208b4b-    ? ./element+      ./element.dhall sha256:e0b948053c8cd8ccca9c39244d89e3f42db43d222531c18151551dfc75208b4b+    ? ./element.dhall , leaf =-      ./leaf sha256:4383e4fc4bf6a29ac2052776972eb59d5355a1cd067cded80d4ff32840969261-    ? ./leaf+      ./leaf.dhall sha256:4383e4fc4bf6a29ac2052776972eb59d5355a1cd067cded80d4ff32840969261+    ? ./leaf.dhall , text =-      ./text sha256:c83cd721d32d7dc28c04ce429c0cb22812639e572637ec348578a58ffb68844f-    ? ./text+      ./text.dhall sha256:c83cd721d32d7dc28c04ce429c0cb22812639e572637ec348578a58ffb68844f+    ? ./text.dhall , emptyAttributes =-      ./emptyAttributes sha256:11b86e2d3f3c75d47a1d580213d2a03fd2c36d64f3e9b6381de0ba23472f64d5-    ? ./emptyAttributes+      ./emptyAttributes.dhall sha256:11b86e2d3f3c75d47a1d580213d2a03fd2c36d64f3e9b6381de0ba23472f64d5+    ? ./emptyAttributes.dhall }
dhall-lang/Prelude/XML/render.dhall view
@@ -24,16 +24,16 @@ -}  let XML =-        ./Type sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c-      ? ./Type+        ./Type.dhall sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c+      ? ./Type.dhall  let Text/concatMap =-        ../Text/concatMap sha256:7a0b0b99643de69d6f94ba49441cd0fa0507cbdfa8ace0295f16097af37e226f-      ? ../Text/concatMap+        ../Text/concatMap.dhall sha256:7a0b0b99643de69d6f94ba49441cd0fa0507cbdfa8ace0295f16097af37e226f+      ? ../Text/concatMap.dhall  let Text/concat =-        ../Text/concat sha256:731265b0288e8a905ecff95c97333ee2db614c39d69f1514cb8eed9259745fc0-      ? ../Text/concat+        ../Text/concat.dhall sha256:731265b0288e8a905ecff95c97333ee2db614c39d69f1514cb8eed9259745fc0+      ? ../Text/concat.dhall  let Attr = { mapKey : Text, mapValue : Text } 
dhall-lang/Prelude/XML/text.dhall view
@@ -16,8 +16,8 @@ -}  let XML =-        ./Type sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c-      ? ./Type+        ./Type.dhall sha256:461930f3aab769ba537d1a4fd71f411504b0c8d1c1a78d65177be8ded0df8a5c+      ? ./Type.dhall  let text     : Text → XML
dhall-lang/Prelude/package.dhall view
@@ -17,11 +17,11 @@       ./Location/package.dhall sha256:0eb4e4a60814018009c720f6820aaa13cf9491eb1b09afb7b832039c6ee4d470     ? ./Location/package.dhall , Map =-      ./Map/package.dhall sha256:598e9c76103b2686fbbda6cc30078f9e60dd846d9eaf155d0149cf0ae06c21c5+      ./Map/package.dhall sha256:c6602939eb75ddaf43e75a37e1f27ace97e03685ceb9d77605b4372547f7cfa8     ? ./Map/package.dhall , Monoid =-      ./Monoid sha256:26fafa098600ef7a54ef9dba5ada416bbbdd21df1af306c052420c61553ad4af-    ? ./Monoid+      ./Monoid.dhall sha256:26fafa098600ef7a54ef9dba5ada416bbbdd21df1af306c052420c61553ad4af+    ? ./Monoid.dhall , Natural =       ./Natural/package.dhall sha256:ee9ed2b28a417ed4e9a0c284801b928bf91b3fbdc1a68616347678c1821f1ddf     ? ./Natural/package.dhall
+ dhall-lang/tests/normalization/success/unit/TextReplaceAbstractA.dhall view
@@ -0,0 +1,4 @@+{- This test verifies that an implementation correctly permits both the+   "replacement" and the "haystack" to be abstract.+-}+λ(x : Text) → λ(y : Text) → Text/replace "a" "-${x}-" "_a_${y}_a_"
+ dhall-lang/tests/normalization/success/unit/TextReplaceAbstractB.dhall view
@@ -0,0 +1,1 @@+λ(x : Text) → λ(y : Text) → "_-${x}-_${y}_-${x}-_"
+ dhall-lang/tests/normalization/success/unit/TextReplaceEmptyA.dhall view
@@ -0,0 +1,1 @@+Text/replace "" "bar" "foo"
+ dhall-lang/tests/normalization/success/unit/TextReplaceEmptyB.dhall view
@@ -0,0 +1,1 @@+"foo"
+ dhall-lang/tests/normalization/success/unit/TextReplaceMultipleA.dhall view
@@ -0,0 +1,1 @@+Text/replace "foo" "bar" "foobazfoo"
+ dhall-lang/tests/normalization/success/unit/TextReplaceMultipleB.dhall view
@@ -0,0 +1,1 @@+"barbazbar"
+ dhall-lang/tests/normalization/success/unit/TextReplaceNFCUnicodeA.dhall view
@@ -0,0 +1,1 @@+Text/replace "👨" "👩" "👨‍👩‍👧‍👦"
+ dhall-lang/tests/normalization/success/unit/TextReplaceNFCUnicodeB.dhall view
@@ -0,0 +1,1 @@+"👩‍👩‍👧‍👦"
+ dhall-lang/tests/normalization/success/unit/TextReplaceNormalizationA.dhall view
@@ -0,0 +1,3 @@+-- This test verifies that implementations do not perform Unicode normalization+-- before substitution.+Text/replace "a\u{0301}" "b" "\u{00e1}c"
+ dhall-lang/tests/normalization/success/unit/TextReplaceNormalizationB.dhall view
@@ -0,0 +1,1 @@+"ác"
+ dhall-lang/tests/normalization/success/unit/TextReplaceSimpleA.dhall view
@@ -0,0 +1,1 @@+Text/replace "foo" "bar" "foo"
+ dhall-lang/tests/normalization/success/unit/TextReplaceSimpleB.dhall view
@@ -0,0 +1,1 @@+"bar"
+ dhall-lang/tests/normalization/success/unit/TextReplaceUnicodeA.dhall view
@@ -0,0 +1,1 @@+Text/replace "💣" "💥" "💣💣💣"
+ dhall-lang/tests/normalization/success/unit/TextReplaceUnicodeB.dhall view
@@ -0,0 +1,1 @@+"💥💥💥"
+ dhall-lang/tests/normalization/success/unit/WithCreateIntermediateRecordsA.dhall view
@@ -0,0 +1,3 @@+{- This test illustrates that if an intermediate record does+   not exist, the `with` operator can create one -}+{ a = 5 } with b.c = 10
+ dhall-lang/tests/normalization/success/unit/WithCreateIntermediateRecordsB.dhall view
@@ -0,0 +1,1 @@+{ a = 5, b.c = 10 }
dhall-lang/tests/normalization/success/unit/WithDesugarA.dhall view
@@ -1,4 +1,3 @@-{- This test verifies that an implementation desugars `with` correctly by-   leaving `x` abstract+{- This test verifies that an implementation no longer implements the old desugaring (pre-v19.0.0) -} \(x: { a : { b : { c : {} } }}) -> x with a.b.c = 42
dhall-lang/tests/normalization/success/unit/WithDesugarB.dhall view
@@ -1,1 +1,1 @@-λ(x : { a : { b : { c : {} } } }) → x ⫽ { a = x.a ⫽ { b = x.a.b ⫽ { c = 42 } } }+λ(x : { a : { b : { c : {} } } }) → x with a.b.c = 42
+ dhall-lang/tests/normalization/success/unit/WithPartiallyAbstractA.dhall view
@@ -0,0 +1,4 @@+{- This test verifies that an implementation will evaluate a+partially abstract `with` expression correctly+-}+λ(x : { b : { c : {} } }) → { a = x } with a.b.c = 42
+ dhall-lang/tests/normalization/success/unit/WithPartiallyAbstractB.dhall view
@@ -0,0 +1,1 @@+λ(x : { b : { c : {} } }) → { a = x with b.c = 42 }
− dhall-lang/tests/normalization/success/unit/WithUnderscoreA.dhall
@@ -1,5 +0,0 @@-{- This test checks that an implementation doesn't mistakenly implement the-   optimization suggested by the standard without the requisite shift-   judgment--}-let _ = 1 in {=} with a = _
− dhall-lang/tests/normalization/success/unit/WithUnderscoreB.dhall
@@ -1,1 +0,0 @@-{ a = 1 }
dhall-lang/tests/parser/success/builtinsA.dhall view
@@ -19,6 +19,7 @@ , List/indexed , List/reverse , Text/show+, Text/replace , Bool , True , False
dhall-lang/tests/parser/success/builtinsB.dhallb view
@@ -1,1 +1,1 @@-˜$ölNatural/foldmNatural/buildnNatural/isZerolNatural/evenkNatural/oddqNatural/toIntegerlNatural/showpInteger/toDoublelInteger/shownInteger/negatemInteger/clamppNatural/subtractkDouble/showjList/buildiList/foldkList/lengthiList/headiList/lastlList/indexedlList/reverseiText/showdBoolõôhOptionaldNonegNaturalgIntegerfDoubledTextdListdTypedKinddSort+˜%ölNatural/foldmNatural/buildnNatural/isZerolNatural/evenkNatural/oddqNatural/toIntegerlNatural/showpInteger/toDoublelInteger/shownInteger/negatemInteger/clamppNatural/subtractkDouble/showjList/buildiList/foldkList/lengthiList/headiList/lastlList/indexedlList/reverseiText/showlText/replacedBoolõôhOptionaldNonegNaturalgIntegerfDoubledTextdListdTypedKinddSort
dhall-lang/tests/type-inference/success/preludeB.dhall view
@@ -361,6 +361,11 @@         ∀(f : a → b) →         ∀(m : List { mapKey : k, mapValue : a }) →           List { mapKey : k, mapValue : b }+    , unpackOptionals :+        ∀(k : Type) →+        ∀(v : Type) →+        ∀(xs : List { mapKey : k, mapValue : Optional v }) →+          List { mapKey : k, mapValue : v }     , values :         ∀(k : Type) →         ∀(v : Type) →
+ dhall-lang/tests/type-inference/success/unit/TextReplaceA.dhall view
@@ -0,0 +1,1 @@+Text/replace
+ dhall-lang/tests/type-inference/success/unit/TextReplaceB.dhall view
@@ -0,0 +1,1 @@+∀(needle : Text) → ∀(replacement : Text) → ∀(haystack : Text) → Text
+ dhall-lang/tests/type-inference/success/unit/WithCreateIntermediateRecordsA.dhall view
@@ -0,0 +1,3 @@+{- This test illustrates that if an intermediate record does+   not exist, the `with` operator can create one -}+{ a = 5 } with b.c = 10
+ dhall-lang/tests/type-inference/success/unit/WithCreateIntermediateRecordsB.dhall view
@@ -0,0 +1,1 @@+{ a : Natural, b : { c : Natural } }
dhall.cabal view
@@ -1,5 +1,5 @@ Name: dhall-Version: 1.35.0+Version: 1.36.0 Cabal-Version: >=1.10 Build-Type: Simple Tested-With: GHC == 8.4.3, GHC == 8.6.1@@ -502,8 +502,8 @@         parser-combinators                               ,         prettyprinter               >= 1.5.1    && < 1.8 ,         prettyprinter-ansi-terminal >= 1.1.1    && < 1.2 ,-        pretty-simple                              < 4   ,-        profunctors                 >= 3.1.2    && < 5.6 ,+        pretty-simple                              < 4.1 ,+        profunctors                 >= 3.1.2    && < 5.7 ,         repline                     >= 0.4.0.0  && < 0.5 ,         serialise                   >= 0.2.0.0  && < 0.3 ,         scientific                  >= 0.3.0.0  && < 0.4 ,@@ -665,6 +665,8 @@         filepath                                       ,         foldl                                    < 1.5 ,         generic-random            >= 1.3.0.0  && < 1.4 ,+        http-client                                    ,+        http-client-tls                                ,         lens-family-core                               ,         megaparsec                                     ,         prettyprinter                                  ,
src/Dhall/Binary.hs view
@@ -192,6 +192,7 @@                        | sb == "Natural/even"      -> return NaturalEven                        | sb == "Natural/fold"      -> return NaturalFold                        | sb == "Natural/show"      -> return NaturalShow+                       | sb == "Text/replace"      -> return TextReplace                     13 | sb == "Integer/clamp"     -> return IntegerClamp                        | sb == "Natural/build"     -> return NaturalBuild                     14 | sb == "Integer/negate"    -> return IntegerNegate@@ -701,6 +702,9 @@          Text ->             Encoding.encodeUtf8ByteArray "Text"++        TextReplace ->+            Encoding.encodeUtf8ByteArray "Text/replace"          TextShow ->             Encoding.encodeUtf8ByteArray "Text/show"
src/Dhall/Diff.hs view
@@ -1032,8 +1032,29 @@     diffWithExpression l r  diffWithExpression :: (Eq a, Pretty a) => Expr Void a -> Expr Void a -> Diff-diffWithExpression l@With{} r@With{} =-    diffWithExpression (Syntax.desugarWith l) (Syntax.desugarWith r)+diffWithExpression (With eL ksL vL) (With eR ksR vR) =+    align+        (   format " " (diffImportExpression eL eR)+        <>  "with "+        <>  align+            (   format " " (diffPath ksL ksR)+            <>  "= "+            <>  diffOperatorExpression vL vR+            )+        )+  where+    diffPath (kL :| []) (kR :| []) =+        diffLabel kL kR+    diffPath (kL₀ :| kL₁ : ksL') (kR₀ :| kR₁ : ksR') =+            format "" (diffLabel kL₀ kR₀)+        <>  dot+        <>  diffPath (kL₁ :| ksL') (kR₁ :| ksR')+    diffPath (kL :| []) (kR₀ :| kR₁ : ksR') =+            format "" (diffLabel kL kR₀)+        <>  plus (foldMap (\k -> dot <> token (Internal.prettyLabel k)) (kR₁ :| ksR'))+    diffPath (kL₀ :| kL₁ : ksL') (kR :| []) =+            format "" (diffLabel kL₀ kR)+        <>  minus (foldMap (\k -> dot <> token (Internal.prettyLabel k)) (kL₁ :| ksL')) diffWithExpression l r@With{} =     mismatch l r diffWithExpression l@With{} r =@@ -1215,6 +1236,12 @@ diffPrimitiveExpression l@Text r =     mismatch l r diffPrimitiveExpression l r@Text =+    mismatch l r+diffPrimitiveExpression TextReplace TextReplace =+    "…"+diffPrimitiveExpression l@TextReplace r =+    mismatch l r+diffPrimitiveExpression l r@TextReplace =     mismatch l r diffPrimitiveExpression TextShow TextShow =     "…"
src/Dhall/Eval.hs view
@@ -50,14 +50,15 @@   , textShow   ) where -import Data.Foldable (foldr', toList)-import Data.Sequence (Seq, ViewL (..), ViewR (..))-import Data.Text     (Text)-import Data.Void     (Void)-import Dhall.Map     (Map)-import Dhall.Set     (Set)-import GHC.Natural   (Natural)-import Prelude       hiding (succ)+import Data.Foldable      (foldr', toList)+import Data.List.NonEmpty (NonEmpty(..))+import Data.Sequence      (Seq, ViewL (..), ViewR (..))+import Data.Text          (Text)+import Data.Void          (Void)+import Dhall.Map          (Map)+import Dhall.Set          (Set)+import GHC.Natural        (Natural)+import Prelude            hiding (succ)  import Dhall.Syntax     ( Binding (..)@@ -191,6 +192,7 @@     | VTextLit !(VChunks a)     | VTextAppend !(Val a) !(Val a)     | VTextShow !(Val a)+    | VTextReplace !(Val a) !(Val a) !(Val a)      | VList !(Val a)     | VListLit !(Maybe (Val a)) !(Seq (Val a))@@ -219,6 +221,7 @@     | VProject !(Val a) !(Either (Set Text) (Val a))     | VAssert !(Val a)     | VEquivalent !(Val a) !(Val a)+    | VWith !(Val a) (NonEmpty Text) !(Val a)     | VEmbed a  -- | For use with "Text.Show.Functions".@@ -360,6 +363,54 @@     singletonVRecordLit v = VRecordLit (Map.singleton k v) {-# INLINE vField #-} +vTextReplaceSlow :: Text -> Val a -> VChunks a -> VChunks a+vTextReplaceSlow needle replacement haystack = go haystack+  where+    go (VChunks [] lastText) =+        if Text.null suffix+        then VChunks [] lastText+        else+            let remainder = Text.drop (Text.length needle) suffix++                rest = go (VChunks [] remainder)++            in  case replacement of+                    VTextLit replacementChunks ->+                        VChunks [] prefix <> replacementChunks <> rest+                    _ ->+                        VChunks [(prefix, replacement)] "" <> rest+      where+        (prefix, suffix) = Text.breakOn needle lastText+    go (VChunks ((firstText, firstInterpolation) : chunks) lastText) =+       if Text.null suffix+       then+           let rest = go (VChunks chunks lastText)++           in  VChunks [(firstText, firstInterpolation)] "" <> rest+       else+           let remainder = Text.drop (Text.length needle) suffix++               rest =+                   go (VChunks ((remainder, firstInterpolation) : chunks) lastText)++           in  case replacement of+                   VTextLit replacementChunks ->+                       VChunks [] prefix <> replacementChunks <> rest+                   _ ->+                       VChunks [(prefix, replacement)] "" <> rest+      where+        (prefix, suffix) = Text.breakOn needle firstText++vTextReplaceFast :: Text -> Text -> VChunks a -> VChunks a+vTextReplaceFast needle replacement (VChunks xys z) = VChunks xys' z'+  where+    xys' = do+       (x, y) <- xys++       return (Text.replace needle replacement x, y)++    z' = Text.replace needle replacement z+ vProjectByFields :: Eq a => Environment a -> Val a -> Set Text -> Val a vProjectByFields env t ks =     if null ks@@ -383,6 +434,18 @@             t' ->                 VProject t' (Left ks) +vWith :: Val a -> NonEmpty Text -> Val a -> Val a+vWith (VRecordLit kvs) (k  :| []     ) v = VRecordLit (Map.insert k  v  kvs)+vWith (VRecordLit kvs) (k₀ :| k₁ : ks) v = VRecordLit (Map.insert k₀ e₂ kvs)+  where+    e₁ =+        case Map.lookup k₀ kvs of+            Nothing  -> VRecordLit mempty+            Just e₁' -> e₁'++    e₂ = vWith e₁ (k₁ :| ks) v+vWith e₀ ks v₀ = VWith e₀ ks v₀+ eval :: forall a. Eq a => Environment a -> Expr Void a -> Val a eval !env t0 =     case t0 of@@ -566,6 +629,35 @@             VPrim $ \case                 VTextLit (VChunks [] x) -> VTextLit (VChunks [] (textShow x))                 t                       -> VTextShow t+        TextReplace ->+            VPrim $ \needle ->+            VPrim $ \replacement ->+            VPrim $ \haystack ->+                case haystack of+                    VTextLit haystackChunks ->+                        case needle of+                            VTextLit (VChunks [] "") ->+                                haystack+                            VTextLit (VChunks [] needleText) ->+                                case replacement of+                                    VTextLit (VChunks [] replacementText) ->+                                        VTextLit+                                            (vTextReplaceFast+                                                needleText+                                                replacementText+                                                haystackChunks+                                            )+                                    _ ->+                                        VTextLit+                                            (vTextReplaceSlow+                                                needleText+                                                replacement+                                                haystackChunks+                                            )+                            _ ->+                                VTextReplace needle replacement haystack+                    _ ->+                        VTextReplace needle replacement haystack         List ->             VPrim VList         ListLit ma ts ->@@ -725,8 +817,8 @@             VAssert (eval env t)         Equivalent t u ->             VEquivalent (eval env t) (eval env u)-        e@With{} ->-            eval env (Syntax.desugarWith e)+        With e₀ ks v ->+            vWith (eval env e₀) ks (eval env v)         Note _ e ->             eval env e         ImportAlt t _ ->@@ -881,6 +973,8 @@             conv env t t' && conv env u u'         (VTextShow t, VTextShow t') ->             conv env t t'+        (VTextReplace a b c, VTextReplace a' b' c') ->+            conv env a a' && conv env b b' && conv env c c'         (VList a, VList a') ->             conv env a a'         (VListLit _ xs, VListLit _ xs') ->@@ -1068,6 +1162,8 @@             TextAppend (quote env t) (quote env u)         VTextShow t ->             TextShow `qApp` t+        VTextReplace a b c ->+            TextReplace `qApp` a `qApp` b `qApp` c         VList t ->             List `qApp` t         VListLit ma ts ->@@ -1118,6 +1214,8 @@             Assert (quote env t)         VEquivalent t u ->             Equivalent (quote env t) (quote env u)+        VWith e ks v ->+            With (quote env e) ks (quote env v)         VInject m k Nothing ->             Field (Union (fmap (fmap (quote env)) m)) $ Syntax.makeFieldSelection k         VInject m k (Just t) ->@@ -1248,6 +1346,8 @@                 TextAppend (go t) (go u)             TextShow ->                 TextShow+            TextReplace ->+                TextReplace             List ->                 List             ListLit ma ts ->
src/Dhall/Lint.hs view
@@ -13,6 +13,7 @@     , removeUnusedBindings     , fixAssert     , fixParentPath+    , addPreludeExtensions     , removeLetInLet     , useToMap     ) where@@ -29,12 +30,14 @@     , Import (..)     , ImportHashed (..)     , ImportType (..)+    , URL (..)     , Var (..)     , subExpressions     )  import qualified Data.Foldable      as Foldable import qualified Data.List.NonEmpty as NonEmpty+import qualified Data.Text          as Text import qualified Dhall.Core         as Core import qualified Dhall.Map          as Map import qualified Dhall.Optics@@ -57,6 +60,7 @@         <|> removeUnusedBindings     e         <|> fixParentPath            e         <|> removeLetInLet           e+        <|> addPreludeExtensions     e  -- | Remove unused `Let` bindings. removeUnusedBindings :: Eq a => Expr s a -> Maybe (Expr s a)@@ -103,6 +107,40 @@         _ ->             Nothing fixParentPath _  = Nothing++{-| This transforms @https://prelude.dhall-lang.org/…/foo@ to+    @https://prelude.dhall-lang.org/…/foo.dhall@+-}+addPreludeExtensions :: Expr s Import -> Maybe (Expr s Import)+addPreludeExtensions (Embed oldImport) = do+    let Import{ importHashed = oldImportHashed, .. } = oldImport++    let ImportHashed{ importType = oldImportType, .. } = oldImportHashed++    case oldImportType of+        Remote URL{ path = oldPath, ..}+            | authority == "prelude.dhall-lang.org" ->+                case oldPath of+                    File{ file = oldFile, .. }+                        | not (Text.isSuffixOf ".dhall" oldFile) -> do+                            let newFile = oldFile <> ".dhall"++                            let newPath = File{ file = newFile, .. }++                            let newImportType = Remote URL{ path = newPath, .. }++                            let newImportHashed =+                                    ImportHashed{ importType = newImportType, .. }++                            let newImport =+                                    Import{ importHashed = newImportHashed, .. }++                            return (Embed newImport)+                    _ ->+                        Nothing+        _ -> do+            Nothing+addPreludeExtensions _ = Nothing  isOrContainsAssert :: Expr s a -> Bool isOrContainsAssert (Assert _) = True
src/Dhall/Main.hs view
@@ -339,6 +339,7 @@                 (   Options.Applicative.long "file"                 <>  Options.Applicative.help "Read expression from a file instead of standard input"                 <>  Options.Applicative.metavar "FILE"+                <>  Options.Applicative.action "file"                 )      parseOutput = fmap f (optional p)@@ -350,6 +351,7 @@                 (   Options.Applicative.long "output"                 <>  Options.Applicative.help "Write result to a file instead of standard output"                 <>  Options.Applicative.metavar "FILE"+                <>  Options.Applicative.action "file"                 )      parseAlpha =@@ -410,6 +412,7 @@             (   Options.Applicative.long "inplace"             <>  Options.Applicative.help "Modify the specified file in-place"             <>  Options.Applicative.metavar "FILE"+            <>  Options.Applicative.action "file"             )      parseInplaceNonTransitive =@@ -425,6 +428,7 @@             (   Options.Applicative.long "transitive"             <>  Options.Applicative.help "Modify the specified file and its transitive relative imports in-place"             <>  Options.Applicative.metavar "FILE"+            <>  Options.Applicative.action "file"             )      parseInput = fmap f (optional p)@@ -436,6 +440,8 @@             (   Options.Applicative.long "path"             <>  Options.Applicative.help "Index all files in path recursively. Will get list of files from STDIN if omitted."             <>  Options.Applicative.metavar "PATH"+            <>  Options.Applicative.action "file"+            <>  Options.Applicative.action "directory"             )      parseTagsOutput = fmap f (optional p)@@ -447,6 +453,7 @@             (   Options.Applicative.long "output"             <>  Options.Applicative.help "The name of the file that the tags are written to. Defaults to \"tags\""             <>  Options.Applicative.metavar "FILENAME"+            <>  Options.Applicative.action "file"             )      parseSuffixes = fmap f (optional p)@@ -508,6 +515,7 @@             (   Options.Applicative.long "output"             <>  Options.Applicative.help "The destination path to create"             <>  Options.Applicative.metavar "PATH"+            <>  Options.Applicative.action "directory"             )      parseNoted =
src/Dhall/Normalize.hs view
@@ -23,6 +23,7 @@ import Control.Applicative   (empty) import Data.Foldable import Data.Functor.Identity (Identity (..))+import Data.List.NonEmpty    (NonEmpty(..)) import Data.Sequence         (ViewL (..), ViewR (..)) import Data.Traversable import Instances.TH.Lift     ()@@ -42,7 +43,7 @@  import qualified Data.Sequence import qualified Data.Set-import qualified Data.Text+import qualified Data.Text     as Text import qualified Dhall.Eval    as Eval import qualified Dhall.Map import qualified Dhall.Set@@ -226,7 +227,7 @@                     App NaturalOdd (NaturalLit n) -> pure (BoolLit (odd n))                     App NaturalToInteger (NaturalLit n) -> pure (IntegerLit (toInteger n))                     App NaturalShow (NaturalLit n) ->-                        pure (TextLit (Chunks [] (Data.Text.pack (show n))))+                        pure (TextLit (Chunks [] (Text.pack (show n))))                     App (App NaturalSubtract (NaturalLit x)) (NaturalLit y)                         -- Use an `Integer` for the subtraction, due to the                         -- following issue:@@ -245,14 +246,14 @@                     App IntegerNegate (IntegerLit n) ->                         pure (IntegerLit (negate n))                     App IntegerShow (IntegerLit n)-                        | 0 <= n    -> pure (TextLit (Chunks [] ("+" <> Data.Text.pack (show n))))-                        | otherwise -> pure (TextLit (Chunks [] (Data.Text.pack (show n))))+                        | 0 <= n    -> pure (TextLit (Chunks [] ("+" <> Text.pack (show n))))+                        | otherwise -> pure (TextLit (Chunks [] (Text.pack (show n))))                     -- `(read . show)` is used instead of `fromInteger` because `read` uses                     -- the correct rounding rule.                     -- See https://gitlab.haskell.org/ghc/ghc/issues/17231.                     App IntegerToDouble (IntegerLit n) -> pure (DoubleLit ((DhallDouble . read . show) n))                     App DoubleShow (DoubleLit (DhallDouble n)) ->-                        pure (TextLit (Chunks [] (Data.Text.pack (show n))))+                        pure (TextLit (Chunks [] (Text.pack (show n))))                     App (App ListBuild _A₀) g -> loop (App (App (App g list) cons) nil)                       where                         _A₁ = Syntax.shift 1 "a" _A₀@@ -317,6 +318,64 @@                         loop (TextLit (Chunks [] newText))                       where                         newText = Eval.textShow oldText+                    App+                        (App (App TextReplace (TextLit (Chunks [] ""))) _)+                        haystack ->+                            return haystack+                    App (App+                            (App TextReplace (TextLit (Chunks [] needleText)))+                            (TextLit (Chunks [] replacementText))+                        )+                        (TextLit (Chunks xys z)) -> do+                            let xys' = do+                                    (x, y) <- xys++                                    let x' = Text.replace needleText replacementText x+                                    return (x', y)++                            let z' = Text.replace needleText replacementText z++                            return (TextLit (Chunks xys' z'))+                    App (App+                            (App TextReplace (TextLit (Chunks [] needleText)))+                            replacement+                        )+                        (TextLit (Chunks [] lastText)) -> do+                            let (prefix, suffix) =+                                    Text.breakOn needleText lastText++                            if Text.null suffix+                                then return (TextLit (Chunks [] lastText))+                                else do+                                    let remainder =+                                            Text.drop+                                                (Text.length needleText)+                                                suffix++                                    loop (TextAppend (TextLit (Chunks [(prefix, replacement)] "")) (App (App (App TextReplace (TextLit (Chunks [] needleText))) replacement) (TextLit (Chunks [] remainder))))+                    App (App+                            (App TextReplace (TextLit (Chunks [] needleText)))+                            replacement+                        )+                        (TextLit+                            (Chunks+                                ((firstText, firstInterpolation) : chunks)+                                lastText+                            )+                        ) -> do+                            let (prefix, suffix) =+                                    Text.breakOn needleText firstText++                            if Text.null suffix+                                then do+                                    loop (TextAppend (TextLit (Chunks [(firstText, firstInterpolation)] "")) (App (App (App TextReplace (TextLit (Chunks [] needleText))) replacement) (TextLit (Chunks chunks lastText))))+                                else do+                                    let remainder =+                                            Text.drop+                                                (Text.length needleText)+                                                suffix++                                    loop (TextAppend (TextLit (Chunks [(prefix, replacement)] "")) (App (App (App TextReplace (TextLit (Chunks [] needleText))) replacement) (TextLit (Chunks ((remainder, firstInterpolation) : chunks) lastText))))                     _ -> do                         res2 <- ctx (App f' a')                         case res2 of@@ -419,6 +478,7 @@             TextLit c -> pure [Chunks [] x, c]             _         -> pure [Chunks [(x, y')] mempty]     TextAppend x y -> loop (TextLit (Chunks [("", x), ("", y)] ""))+    TextReplace -> pure TextReplace     TextShow -> pure TextShow     List -> pure List     ListLit t es@@ -613,8 +673,26 @@         r' <- loop r          pure (Equivalent l' r')-    With e' k v ->-        loop (Syntax.desugarWith (With e' k v))+    With e ks v -> do+        e' <- loop e+        v' <- loop v++        case e' of+            RecordLit kvs ->+                case ks of+                    k :| [] ->+                        return (RecordLit (Dhall.Map.insert k (Syntax.makeRecordField v') kvs))+                    k₀ :| k₁ : ks' -> do+                        let e₁ =+                                case Dhall.Map.lookup k₀ kvs of+                                    Nothing -> RecordLit mempty+                                    Just r  -> Syntax.recordFieldValue r++                        e₂ <- loop (With e₁ (k₁ :| ks') v')++                        return (RecordLit (Dhall.Map.insert k₀ (Syntax.makeRecordField e₂) kvs))+            _ ->+                return (With e' ks v')     Note _ e' -> loop e'     ImportAlt l _r -> loop l     Embed a -> pure (Embed a)@@ -684,6 +762,10 @@           App (App ListReverse _) (ListLit _ _) -> False           App TextShow (TextLit (Chunks [] _)) ->               False+          App (App (App TextReplace (TextLit (Chunks [] ""))) _) _ ->+              False+          App (App (App TextReplace (TextLit (Chunks [] _))) _) (TextLit _) ->+              False           _ -> True       Let _ _ -> False       Annot _ _ -> False@@ -756,6 +838,7 @@               TextLit _ -> False               _         -> True       TextAppend _ _ -> False+      TextReplace -> True       TextShow -> True       List -> True       ListLit t es -> all loop t && all loop es
src/Dhall/Parser.hs view
@@ -1,4 +1,5 @@-{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE RecordWildCards   #-}+{-# LANGUAGE OverloadedStrings #-}  -- | This module contains Dhall's parsing logic @@ -27,8 +28,7 @@ import Dhall.Syntax import Text.Megaparsec   (ParseErrorBundle (..), PosState (..)) -import qualified Data.Char-import qualified Data.Text+import qualified Data.Text       as Text import qualified Dhall.Core      as Core import qualified Text.Megaparsec @@ -76,7 +76,7 @@  instance Exception ParseError --- | Parse an expression from `Data.Text.Text` containing a Dhall program+-- | Parse an expression from `Text.Text` containing a Dhall program exprFromText   :: String -- ^ User-friendly name describing the input expression,             --   used in parsing error messages@@ -92,8 +92,15 @@  -- | Create a header with stripped leading spaces and trailing newlines createHeader :: Text -> Header-createHeader =-    Header . Data.Text.dropWhile Data.Char.isSpace . Data.Text.dropWhileEnd (/= '\n')+createHeader text = Header (prefix <> newSuffix)+  where+    isWhitespace c = c == ' ' || c == '\n' || c == '\r' || c == '\t'++    prefix = Text.dropAround isWhitespace text++    newSuffix+        | Text.null prefix = ""+        | otherwise        = "\n"  -- | Like `exprFromText` but also returns the leading comments and whitespace -- (i.e. header) up to the last newline before the code begins
src/Dhall/Parser/Expression.hs view
@@ -580,7 +580,8 @@                     'S' ->    Const Sort       <$ _Sort                     'T' ->                         choice-                            [ TextShow         <$ _TextShow+                            [ TextReplace      <$ _TextReplace+                            , TextShow         <$ _TextShow                             , Text             <$ _Text                             , BoolLit True     <$ _True                             , Const Type       <$ _Type@@ -874,10 +875,7 @@                     _ <- optional (whitespace *> _comma)                      whitespace-                    {- The `flip` is necessary because `toMapWith` is internally-                       based on `Data.Map.fromListWithKey` which combines keys-                       in reverse order-                    -}+                     let combine k = liftA2 $ \rf rf' -> makeRecordField $ Combine (Just k)                                                             (recordFieldValue rf')                                                             (recordFieldValue rf)
src/Dhall/Parser/Token.hs view
@@ -65,6 +65,7 @@     _Integer,     _Double,     _Text,+    _TextReplace,     _TextShow,     _List,     _True,@@ -1052,6 +1053,13 @@ -} _Text :: Parser () _Text = builtin "Text"++{-| Parse the @Text/replace@ built-in++    This corresponds to the @Text-replace@ rule from the official grammar+-}+_TextReplace :: Parser ()+_TextReplace = builtin "Text/replace"  {-| Parse the @Text/show@ built-in 
src/Dhall/Pretty/Internal.hs view
@@ -765,8 +765,13 @@                 docs d             | otherwise =                 [ prettyExpression c ]-    prettyExpression (With a b c) =-            prettyExpression a+    prettyExpression (With (Dhall.Syntax.shallowDenote -> a) b c) =+            case a of+                With{} ->+                    -- Don't parenthesize an inner with-expression+                    prettyExpression a+                _ ->+                    prettyImportExpression_ a         <>  Pretty.flatAlt long short       where         short = " " <> keyword "with" <> " " <> update@@ -1253,6 +1258,8 @@         builtin "Double/show"     prettyPrimitiveExpression Text =         builtin "Text"+    prettyPrimitiveExpression TextReplace =+        builtin "Text/replace"     prettyPrimitiveExpression TextShow =         builtin "Text/show"     prettyPrimitiveExpression List =@@ -1427,14 +1434,17 @@     prettyCompletionLit :: Pretty a => Int -> Map Text (RecordField Src a) -> Doc Ann     prettyCompletionLit = prettyRecordLike . hangingBraces +    prettyRecordLike+        :: Pretty a+        => ([(Doc Ann, Doc Ann)] -> Doc Ann)+        -> Map Text (RecordField Src a)+        -> Doc Ann     prettyRecordLike braceStyle a         | Data.Foldable.null a =             lbrace <> equals <> rbrace         | otherwise =-            braceStyle (map prettyRecordEntry consolidated)+            braceStyle (map prettyRecordEntry (consolidateRecordLiteral a))       where-        consolidated = consolidateRecordLiteral a-         prettyRecordEntry kv@(KeyValue keys mSrc2 val) =             case keys of                 (mSrc0, key, mSrc1) :| []@@ -1627,18 +1637,22 @@ {- This utility function converts    `{ x = { y = { z = 1 } } }` to `{ x.y.z = 1 }` -}-consolidateRecordLiteral-    :: Map Text (RecordField Src a) -> [KeyValue Src a]-consolidateRecordLiteral = map adapt . Map.toList+consolidateRecordLiteral :: Map Text (RecordField Src a) -> [KeyValue Src a]+consolidateRecordLiteral = concatMap adapt . Map.toList   where-    adapt :: (Text, RecordField Src a) -> KeyValue Src a+    adapt :: (Text, RecordField Src a) -> [KeyValue Src a]     adapt (key, RecordField mSrc0 val mSrc1 mSrc2)         | not (containsComment mSrc2)-        , RecordLit m <- shallowDenote val-        , [ KeyValue keys mSrc2' val' ] <- map adapt (Map.toList m) =-            KeyValue (NonEmpty.cons (mSrc0, key, mSrc1) keys) mSrc2' val'+        , RecordLit m <- e+        , [ KeyValue keys mSrc2' val' ] <- concatMap adapt (Map.toList m) =+            [ KeyValue (NonEmpty.cons (mSrc0, key, mSrc1) keys) mSrc2' val' ]++        | Combine (Just _) l r <- e =+            adapt (key, makeRecordField l) <> adapt (key, makeRecordField r)         | otherwise =-            KeyValue (pure (mSrc0, key, mSrc1)) mSrc2 val+            [ KeyValue (pure (mSrc0, key, mSrc1)) mSrc2 val ]+      where+        e = shallowDenote val  -- | Escape a `Data.Text.Text` literal using Dhall's escaping rules for --   single-quoted @Text@
src/Dhall/Syntax.hs view
@@ -506,9 +506,9 @@     | Integer     -- | > IntegerLit n                             ~  ±n     | IntegerLit Integer-    -- | > IntegerClamp                               ~  Integer/clamp+    -- | > IntegerClamp                             ~  Integer/clamp     | IntegerClamp-    -- | > IntegerNegate                              ~  Integer/negate+    -- | > IntegerNegate                            ~  Integer/negate     | IntegerNegate     -- | > IntegerShow                              ~  Integer/show     | IntegerShow@@ -526,6 +526,8 @@     | TextLit (Chunks s a)     -- | > TextAppend x y                           ~  x ++ y     | TextAppend (Expr s a) (Expr s a)+    -- | > TextReplace                              ~ Text/replace+    | TextReplace     -- | > TextShow                                 ~  Text/show     | TextShow     -- | > List                                     ~  List@@ -809,6 +811,7 @@ unsafeSubExpressions f (TextLit chunks) =     TextLit <$> chunkExprs f chunks unsafeSubExpressions f (TextAppend a b) = TextAppend <$> f a <*> f b+unsafeSubExpressions _ TextReplace = pure TextReplace unsafeSubExpressions _ TextShow = pure TextShow unsafeSubExpressions _ List = pure List unsafeSubExpressions f (ListLit a b) = ListLit <$> traverse f a <*> traverse f b@@ -1202,6 +1205,7 @@         , "List/last"         , "List/indexed"         , "List/reverse"+        , "Text/replace"         , "Text/show"         , "Bool"         , "True"
src/Dhall/TH.hs view
@@ -178,7 +178,7 @@         Union kts -> do             let name = Syntax.mkName (Text.unpack typeName) -            constructors <- traverse (toConstructor haskellTypes) (Dhall.Map.toList kts )+            constructors <- traverse (toConstructor haskellTypes typeName) (Dhall.Map.toList kts )              return (DataD [] name [] Nothing constructors derivingClauses) @@ -227,7 +227,7 @@ toDeclaration haskellTypes SingleConstructor{..} = do     let name = Syntax.mkName (Text.unpack typeName) -    constructor <- toConstructor haskellTypes (constructorName, Just code)+    constructor <- toConstructor haskellTypes typeName (constructorName, Just code)      return (DataD [] name [] Nothing [constructor] derivingClauses) @@ -235,15 +235,27 @@ toConstructor     :: (Eq a, Pretty a)     => [HaskellType (Expr s a)]+    -> Text+    -- ^ typeName     -> (Text, Maybe (Expr s a))     -- ^ @(constructorName, fieldType)@     -> Q Con-toConstructor haskellTypes (constructorName, maybeAlternativeType) = do+toConstructor haskellTypes outerTypeName (constructorName, maybeAlternativeType) = do     let name = Syntax.mkName (Text.unpack constructorName)      let bang = Bang NoSourceUnpackedness NoSourceStrictness      case maybeAlternativeType of+        Just dhallType+            | let predicate haskellType =+                    Core.judgmentallyEqual (code haskellType) dhallType+                    && typeName haskellType /= outerTypeName+            , Just haskellType <- List.find predicate haskellTypes -> do+                let innerName =+                        Syntax.mkName (Text.unpack (typeName haskellType))++                return (NormalC name [ (bang, ConT innerName) ])+         Just (Record kts) -> do             let process (key, dhallFieldType) = do                     haskellFieldType <- toNestedHaskellType haskellTypes dhallFieldType
src/Dhall/TypeCheck.hs view
@@ -580,6 +580,16 @@              return VText +        TextReplace ->+            return+                (   VHPi "needle" VText  (\_needle ->+                        VHPi "replacement" VText (\_replacement ->+                            VHPi "haystack" VText (\_haystack ->+                                VText+                            )+                        )+                    )+                )         TextShow ->             return (VText ~> VText) @@ -1251,9 +1261,28 @@              return (VConst Type) -        e@With{} ->-            loop ctx (Syntax.desugarWith e)+        With e ks v -> do+            tE' <- loop ctx e +            kTs' <- case tE' of+                VRecord kTs' -> return kTs'+                _            -> die (NotWithARecord e (quote names tE'))++            case ks of+                k :| [] -> do+                    tV' <- loop ctx v++                    return (VRecord (Dhall.Map.insert k tV' kTs'))+                k₀ :| k₁ : ks' -> do+                    let e₁ =+                            if Dhall.Map.member k₀ kTs'+                                then Field e (Syntax.makeFieldSelection k₀)+                                else RecordLit mempty++                    tV' <- loop ctx (With e₁ (k₁ :| ks') v)++                    return (VRecord (Dhall.Map.insert k₀ tV' kTs'))+         Note s e ->             case loop ctx e of                 Left (TypeError ctx' (Note s' e') m) ->@@ -1343,6 +1372,7 @@     | NotAnEquivalence (Expr s a)     | IncomparableExpression (Expr s a)     | EquivalenceTypeMismatch (Expr s a) (Expr s a) (Expr s a) (Expr s a)+    | NotWithARecord (Expr s a) (Expr s a)     | CantAnd (Expr s a) (Expr s a)     | CantOr (Expr s a) (Expr s a)     | CantEQ (Expr s a) (Expr s a)@@ -4238,6 +4268,45 @@         \                                                                                \n\         \" <> insert _R <> "\n" +prettyTypeMessage (NotWithARecord expr0 expr1) = ErrorMessages {..}+  where+    short = "❰with❱ only works on records"++    long =+        "Explanation: You can use ❰with❱ to update a record, like this:                  \n\+        \                                                                                \n\+        \                                                                                \n\+        \    ┌─────────────────────────┐                                                 \n\+        \    │  { a = 5 } with b = 10  │  This is valid because ❰{ a = 5}❱ is a record   \n\+        \    └────────────────────────┘                                                  \n\+        \                                                                                \n\+        \    ┌──────────────────────────────────────────┐                                \n\+        \    │  λ(r : { a : Natural }) → r with b = 10  │  This is also valid because    \n\+        \    └──────────────────────────────────────────┘  ❰r❱ is a record               \n\+        \                                                                                \n\+        \                                                                                \n\+        \... but you cannot use ❰with❱ to update an expression that is not a record.  For\n\+        \example, the following expression is " <> _NOT <> " valid:                      \n\+        \                                                                                \n\+        \                                                                                \n\+        \    ┌───────────────┐                                                           \n\+        \    │ 1 with b = 10 │  Invalid: ❰1❱ is not a record                             \n\+        \    └───────────────┘                                                           \n\+        \                                                                                \n\+        \                                                                                \n\+        \You tried to update the following expressions:                                  \n\+        \                                                                                \n\+        \" <> txt0 <> "\n\+        \                                                                                \n\+        \... which has type\n\+        \                                                                                \n\+        \" <> txt1 <> "\n\+        \                                                                                \n\+        \... which is not a record type\n"+      where+        txt0 = insert expr0+        txt1 = insert expr1+ prettyTypeMessage (CantAnd expr0 expr1) =         buildBooleanOperator "&&" expr0 expr1 @@ -4649,6 +4718,8 @@         IncomparableExpression <$> f a     EquivalenceTypeMismatch a b c d ->         EquivalenceTypeMismatch <$> f a <*> f b <*> f c <*> f d+    NotWithARecord a b ->+        NotWithARecord <$> f a <*> f b     CantAnd a b ->         CantAnd <$> f a <*> f b     CantOr a b ->
tests/Dhall/Test/Import.hs view
@@ -19,6 +19,8 @@ import qualified Dhall.Import                     as Import import qualified Dhall.Parser                     as Parser import qualified Dhall.Test.Util                  as Test.Util+import qualified Network.HTTP.Client              as HTTP+import qualified Network.HTTP.Client.TLS          as HTTP import qualified System.FilePath                  as FilePath import qualified Test.Tasty                       as Tasty import qualified Test.Tasty.HUnit                 as Tasty.HUnit@@ -81,8 +83,14 @@          let unsetCache = Turtle.unset "XDG_CACHE_HOME" +        let httpManager =+                HTTP.newManager+                    HTTP.tlsManagerSettings+                        { HTTP.managerResponseTimeout = HTTP.responseTimeoutMicro (120 * 1000 * 1000) }         let load =-                State.evalStateT (Test.Util.loadWith actualExpr) (Import.emptyStatus directoryString)+                State.evalStateT+                    (Test.Util.loadWith actualExpr)+                    (Import.emptyStatusWithManager httpManager directoryString)          let usesCache = [ "hashFromCacheA.dhall"                         , "unit/asLocation/HashA.dhall"
tests/Dhall/Test/QuickCheck.hs view
@@ -374,6 +374,7 @@             % (1 :: W "Text")             % (1 :: W "TextLit")             % (1 :: W "TextAppend")+            % (1 :: W "TextReplace")             % (1 :: W "TextShow")             % (1 :: W "List")             % (1 :: W "ListLit")
tests/Dhall/Test/TH.hs view
@@ -31,6 +31,21 @@ deriving instance Eq   Employee deriving instance Show Employee +Dhall.TH.makeHaskellTypes+  [ SingleConstructor "Bar" "MakeBar" "(./tests/th/issue2066.dhall).Bar"+  , SingleConstructor "Foo" "MakeFoo" "(./tests/th/issue2066.dhall).Foo"+  , MultipleConstructors "Qux" "(./tests/th/issue2066.dhall).Qux"+  ]++deriving instance Eq   Bar+deriving instance Show Bar++deriving instance Eq   Foo+deriving instance Show Foo++deriving instance Eq   Qux+deriving instance Show Qux+ tests :: TestTree tests = Tasty.testGroup "Template Haskell" [ makeHaskellTypeFromUnion ] @@ -51,3 +66,7 @@     employee <- Dhall.input Dhall.auto "let Department = ./tests/th/Department.dhall in { name = \"John\", department = Department.Marketing }"      Tasty.HUnit.assertEqual "" employee MakeEmployee{ name = "John", department = Marketing }++    qux <- Dhall.input Dhall.auto "let T = ./tests/th/issue2066.dhall in T.Qux.Foo { foo = +2, bar = { baz = +3 } }"++    Tasty.HUnit.assertEqual "" qux (Foo MakeFoo{ foo = 2, bar = MakeBar{ baz = 3 } })
+ tests/diff/with.txt view
@@ -0,0 +1,5 @@+  λ(… : { …+        })+→ … with …+ .c.d+         = - 2+           + 3
+ tests/diff/withA.dhall view
@@ -0,0 +1,1 @@+λ(r : { a : Natural }) → r with b = 2
+ tests/diff/withB.dhall view
@@ -0,0 +1,1 @@+λ(r : { a : Natural }) → r with b.c.d = 3
+ tests/format/duplicatesA.dhall view
@@ -0,0 +1,4 @@+{ {- Comments around duplicate fields are not preserved -} foo.bar = 1+, foo = { baz = {- Comments within values are still preserved-} 2 }+, foo = qux+}
+ tests/format/duplicatesB.dhall view
@@ -0,0 +1,6 @@+{ foo.bar = 1+, foo.baz+  = {- Comments within values are still preserved-}+    2+, foo = qux+}
tests/format/headerA.dhall view
@@ -1,4 +1,4 @@    -{- bla -}+{- bla -}     True
tests/format/headerB.dhall view
@@ -1,3 +1,2 @@ {- bla -}- True
+ tests/format/headerNoNewlineA.dhall view
@@ -0,0 +1,1 @@+{- -}0
+ tests/format/headerNoNewlineB.dhall view
@@ -0,0 +1,2 @@+{- -}+0
+ tests/format/issue2047A.dhall view
@@ -0,0 +1,4 @@+let x = ({ foo = 1 } ∧ { bar = 2 })+  with bar = 3 +  with foo = 4 +in x
+ tests/format/issue2047B.dhall view
@@ -0,0 +1,1 @@+let x = ({ foo = 1 } ∧ { bar = 2 }) with bar = 3 with foo = 4 in x
tests/format/largeRecordA.dhall view
@@ -2,7 +2,6 @@ -- -- To exercise all options documented in https://nethackwiki.com/wiki/Options -- see `./unvalidated.dhall`- let types = ./../types.dhall  let defaults = ./../defaults.dhall
tests/format/largeRecordB.dhall view
@@ -2,7 +2,6 @@ -- -- To exercise all options documented in https://nethackwiki.com/wiki/Options -- see `./unvalidated.dhall`- let types = ./../types.dhall  let defaults = ./../defaults.dhall
+ tests/lint/success/PreludeExtensionA.dhall view
@@ -0,0 +1,1 @@+https://prelude.dhall-lang.org/List/map
+ tests/lint/success/PreludeExtensionB.dhall view
@@ -0,0 +1,1 @@+https://prelude.dhall-lang.org/List/map.dhall
tests/lint/success/multiletA.dhall view
@@ -1,5 +1,4 @@ -- example0.dhall- let Person     : Type     =   ∀(Person : Type)@@ -21,7 +20,7 @@  let everybody     : Person → List Text-    = let concat = http://prelude.dhall-lang.org/List/concat+    = let concat = http://prelude.dhall-lang.org/List/concat.dhall              in    λ(x : Person)           → x
tests/lint/success/multiletB.dhall view
@@ -1,5 +1,4 @@ -- example0.dhall- let Person     : Type     = ∀(Person : Type) →@@ -20,7 +19,7 @@  let everybody     : Person → List Text-    = let concat = http://prelude.dhall-lang.org/List/concat+    = let concat = http://prelude.dhall-lang.org/List/concat.dhall        in  λ(x : Person) →             x
tests/lint/success/regression0A.dhall view
@@ -1,4 +1,4 @@-    let replicate = https://prelude.dhall-lang.org/List/replicate+    let replicate = https://prelude.dhall-lang.org/List/replicate.dhall  in  let Config = { name : Text, age : Natural } 
tests/lint/success/regression0B.dhall view
@@ -1,3 +1,3 @@-let replicate = https://prelude.dhall-lang.org/List/replicate+let replicate = https://prelude.dhall-lang.org/List/replicate.dhall  in  replicate 10 Text "!"
+ tests/th/issue2066.dhall view
@@ -0,0 +1,7 @@+let Bar = { baz : Integer }++let Foo = { foo : Integer, bar : Bar }++let Qux = < Foo : Foo | Bar : Bar >++in  { Foo, Bar, Qux }