Commit Graph

1421 Commits

Author SHA1 Message Date
Gabriel Gonzalez dbcfe7019d Fix `Inject` instance for lists (#1261)
* Fix `Inject` instance for lists

Fixes #1254

This also adds tests for conversions back and forth between Dhall and
Haskell values

* Add `Inject` instances for `Scientific` and `String`

... so that we don't need to comment them out!
2019-08-30 04:15:43 +00:00
Gabriel Gonzalez 4445eee871 Use `tasty-expected-failure` (#1250)
* Use `tasty-expected-failure`

... to exercise tests that we currently skip

Fixes https://github.com/dhall-lang/dhall-haskell/issues/1245

* Fix bounds syntax for `tasty-expected-failure`

... as caught by @sjakobi

Co-Authored-By: Simon Jakobi <simon.jakobi@gmail.com>

* Fix GHC 8.6 build failure

`tasty-expected-failure` needs to be bumped to include revision 1, which
supports GHC 8.6

* Fix build failure for older `tasty-hunit` versions

`tasty-hunit-0.9.2` and older have the wrong type for `assertFailure`

* Fix `stack` build for LTS 6

... and sort the list of `extra-deps`
2019-08-30 03:31:19 +00:00
Simon Jakobi e687b11fc2 Avoid handling `Note`s in Dhall.Diff (#1260)
* Avoid handling `Note`s in Dhall.Diff

Context: #1256.

* Fix QuickCheck tests
2019-08-30 02:30:55 +00:00
Gabriel Gonzalez 557abad603 Fix diff for `Text` literals (#1262)
This is essentially the exact same problem and fix as #1213

Normally I would add a test, except that our test suite for diffs doesn't
yet support escape codes.  However, the basic problem was the following
output:

```
$ dhall diff '"1"' '"2"'
- "…"
+ "…"
```

... which now displays (with color highlighting) this output:

```
$ dhall diff '"1"' '"2"'
"12"  -- Imagine that the 1 is red and the 2 is green
```
2019-08-29 22:49:21 +00:00
Gabriel Gonzalez 9ff63b2234 Improve HTTP errors (#1253)
* Improve HTTP errors

Fixes https://github.com/dhall-lang/dhall-haskell/issues/1251

This improves HTTP error messages by:

* Expanding the set of recognized status codes
* Adding up to 7 lines of the response body

For example:

```
Error: Remote file missing

URL:

↳ https://httpbin.org/statu

Message:

1│ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
2│ <title>404 Not Found</title>
3│ <h1>Not Found</h1>
4│ <p>The requested URL was not found on the server.  If you entered the URL manually please check your spelling and try again.</p>
```

* Always include HTTP status code in output

... as suggested by @sjakobi

* Use "not found" wording for 404 message

This is closer to the official wording for the error message

* Compress error message formatting

There's no need to put the URL and status code on separate lines since
they are compact
2019-08-29 18:01:43 +00:00
Simon Jakobi eb8b6101a9 dhall-lsp-server.cabal: Remove placeholder description, add synopsis (#1259) 2019-08-29 17:07:08 +00:00
Gabriel Gonzalez 0b3dae7496 Document Dhall support for caching protected imports (#1247)
Fixes #1234
2019-08-25 22:59:38 +00:00
Philip Potter 06dc9ab55f [dhall format] Prefer unquoted URLs (#1235)
* [dhall format] Prefer unquoted URLs

This updates `dhall format` to prefer unquoted URLs.

I included the test cases described in #1109, but along the way I
discovered a standard bug so I have opened dhall-lang/dhall-lang#704 to
fix it.  This change depends on that upstream fix.

Fixes #1109.

* pull in latest dhall-lang

* skip unimplemented tests
2019-08-22 21:28:26 +00:00
Gabriel Gonzalez f3d6a7ac61 Improve diff for non-empty lists (#1244)
* Improve diff for non-empty lists

... as discussed in https://github.com/dhall-lang/dhall-haskell/issues/1243

* Improve diff for empty list

... as suggested by @sjakobi
2019-08-21 01:42:26 +00:00
quasicomputational 4c6d76e4a8 Run all of the dhall package's tests on Appveyor. (#1142)
This entails a bunch of surgery to the package set used with LTS 6.
Because I was seeing errors, I disabled allow-newer and found this
consistent package set. I also needed a newer version of `tls`, which
entailed a bunch of bumps.
2019-08-20 14:38:01 +00:00
Simon Jakobi 93711aecf8 Throw error when union value is incompatible with Inline nesting (#1226) 2019-08-20 03:12:16 +00:00
Frederik Ramcke 2c16750b46 dhall-lsp-server: Update and expand README.md (#1223)
* Update and expand README.md

* Fix typos

* Fix vscode-dhall-lsp-server instructions

* Add mention of the dhall-haskell README
2019-08-20 02:34:02 +00:00
Frederik Ramcke b997d43efd Fix type-on-hover over non-dependent function types (#1233)
Previously, hovering over any part of a non-dependent function type like
`Bool -> Bool` would result in the type of the domain being displayed
(`Bool` in this example). The correct type is `Type`.

This bug resulted from the fact that we
expected all functions types to be syntactically of the form
`forall (b : Bool) -> Bool`, disregarding the simpler syntax for the
non-dependent function space (which desugars to
`forall (_ : Bool) -> Bool`).
2019-08-20 02:00:18 +00:00
Frederik Ramcke 6ce01a0eda dhall-lsp-server: Remove superfluous language extensions (#1232)
* Remove superfluous language extensions

* Remove use of ScopedTypeVariables

In order to make the code more accessible it makes sense to refrain from
using ScopedTypeVariables, which we only used in two places.

* Remove use of LambdaCase extension
2019-08-20 01:35:07 +00:00
Simon Jakobi f75d98aa9c
Update dhall-lang submodule, skip test failures (#1240)
The new tests were introduced in dhall-lang/dhall-lang#698.

Also:

* Document shortcommings of Expr's Eq and Ord instances.
  Haddock for GHC-7.10.3 can't handle haddocks on vanilla derived
  instances, so we use StandaloneDeriving.

* Add explanation for skipped AssertNaN test
2019-08-19 18:51:13 +02:00
Eric Conlon 96c94ddfc4 :help command in repl (#1237)
* :help command in repl (#1236)

* review feedback
2019-08-18 19:42:56 +00:00
Frederik Ramcke 8c3db821db Correctly handle dependent types in dhall-lsp-server (#1216)
* Correctly handle dependent types in dhall-lsp-server

Removes the "fast path" when typechecking `let`s whose bound expression
has a small type. This optimisation is no longer legal in the presence
of dependent types (as introduced in #1164).

* Fix bad merge

* Remove redundant import
2019-08-12 13:27:41 +00:00
Gabriel Gonzalez 0348d18ac7 Fix documentation for `UnionInputType` (#1230)
Fixes #1227
2019-08-10 00:12:35 +00:00
Gabriel Gonzalez c392f4a286 Fix `NaN` to be judgmentally equivalent to itself (#1231)
... as required by the standard

Fixes #1224
2019-08-09 23:32:53 +00:00
Gabriel Gonzalez 0256b35087 Update `README` to mention pre-built OS X executables (#1229)
* Update `README` to mention pre-built OS X executables

* Retain the reference to `brew`

... based on a question by @sjakobi
2019-08-09 23:01:47 +00:00
MaxOw ec8bcf0d63 Add autoWithFix helper function for Interpreting recursive data types (#1161) (#1195)
* Add autoWithFix helper function (#1161)

* Fix some dependencies. Remove TypeApplications extension.

* Pin recursion-schemes to appease hydra.

* Implement review suggestions.

* Fix error in documentation.
2019-08-09 20:09:09 +00:00
Gabriel Gonzalez 268c79631d Fix `yaml-to-dhall` support for empty objects (#1186)
* Fix `yaml-to-dhall` support for empty objects

`yaml-to-dhall` was decoding an empty object into:

```dhall
[] : { mapKey : Text, mapValue : Text }
```

... instead of:

```dhall
[] : List { mapKey : Text, mapValue : Text }
```

... which this change fixes

* Add missing test files

* Hopefully fix test failure on Windows

I suspect that the test failure is due to the locale for the test suite
not being set to UTF8
2019-08-09 18:21:40 +00:00
Simon Jakobi ce17b86bc5 Make equivalences of terms of different types fail during typechecking (#1225)
* Make equivalences of terms of different types fail during typechecking

This fixes the `EquivalenceNotSameType` test from
https://github.com/dhall-lang/dhall-lang/pull/698.

* s/assertion/equivalence
2019-08-09 17:50:11 +00:00
Simon Jakobi 94f9f75c6a Remove some redundant sorting during normalization (#1228)
We can rely on the result of an operation on two sorted maps being
sorted already.
2019-08-09 16:00:07 +00:00
Frederik Ramcke 4c1736b154 Improve rendering of types when annotating lets (#1222)
Previously the annotated type would have too many line-breaks, e.g. when
the result of annotating
  let id = \(A : Type) -> \(a : A) -> a
was
  let id :   ∀ ( A
  : Type
  )
  → ∀ ( a
  : A
  )
  → A = \(A : Type) -> \(a : A) -> a
while it should be
  let id : ∀(A : Type) → ∀(a : A) → A = \(A : Type) -> \(a : A) -> a
2019-08-08 15:16:07 +00:00
Simon Jakobi c2cc641408 Implement missing rules for field selection normalization (#1179)
…as standardized in https://github.com/dhall-lang/dhall-lang/pull/682.
2019-08-08 14:36:01 +00:00
Frederik Ramcke 6609270fe4 Only underline link in import (#1217)
This restricts the clickable link part of an import to just the actual
link; previously we also underline hash and headers if those were
present.

Now:
./Bool/package.dhall sha256:7ee950e7c2142be5923f76d00263e536b71d96cb9c190d7743c1679501ddeb0a
~~~~~~~~~~~~~~~~~~~~

Previously:
./Bool/package.dhall sha256:7ee950e7c2142be5923f76d00263e536b71d96cb9c190d7743c1679501ddeb0a
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2019-08-08 13:42:49 +00:00
Simon Jakobi a2118eaeee Tune the AppVeyor config some more (#1214)
* Try to cache the extra-deps from stack-lts-6.yaml

* Limit `stack bench` to the dhall package

For some reason `stack bench` triggers a rebuild of _all_ the local
packages, which we don't need.
2019-08-08 12:08:25 +00:00
Simon Jakobi 97f0ff8552 Simplify Natural/subtract when its arguments are equivalent (#1220)
…as standardized in https://github.com/dhall-lang/dhall-lang/pull/685.
2019-08-08 02:39:21 +00:00
Gabriel Gonzalez ecb5814f59 Fix diffs for lists (#1213)
Fixes https://github.com/dhall-lang/dhall-haskell/issues/1211

The original implementation of diffing two lists in #450 attempted to add a
special case in the logic for when the list had no common elements.
However, this led to a bug where the two lists would display different
if they were both empty.

lists would never render.

This change fixes that by removing the special case.

The new output for the linked example is:

```
Use "dhall --explain" for detailed errors

Error: Assertion failed

[ …
, - 1
, …
, + 55
]

16│                assert : fibs 10 ≡ [ 0, 1, 2, 3, 5, 8, 13, 21, 34, 55 ]
17│

(stdin):16:16
```
2019-08-08 02:00:00 +00:00
Simon Jakobi b9375fc9c7 Implement "Simplify ⫽ when its arguments are equivalent" (#1196)
…as standardized in https://github.com/dhall-lang/dhall-lang/pull/684
2019-08-08 00:14:08 +00:00
Frederik Ramcke 5f3b05a8f2 dhall-lsp-server: Implement completion support (#1190)
* Implement completion support

Completes the following:
- environment variables
- local imports
- identifiers in scope (as well as built-ins)
- record projections
- union constructors

* Add support for general dependent types

Removes the non-dependent let path. Needed since #1164 added support for
general dependent types.

* Remove unused import

* Use monad instance to cast between `Expr Src _`

As suggested by @Gabriel439: Use `typeOf (do _ <- expr; holeExpr)`
instead of `fmap undefined expr`. In the absence of `Embed` constructors
(in this case `Import`s) the two are equivalent.

* Simplify completeFromContext

Caught by @Gabriel439

* Remove debug code

* Add 1s timeout to listDirectory call

As pointed out by @Gabriel439, listDirectory can be a potentially
expensive operation. Adding a timeout should improve the user
experience.

* Fix unclean merge
2019-08-07 14:11:59 +00:00
Frederik Ramcke 523861a92c dhall-lsp-server: Upgrade to haskell-lsp 0.15 (#1203)
* Clean up dhall-lsp-server.cabal

Removes unused dependencies.

* Upgrade to haskell-lsp-0.15.0.0

The stackage LTS version is still 0.8.2 so we need to add this as an
'extra-dep'.

* Display type information as plaintext rather than markdown

* Fix nix build

* Update nix haskell-lsp-types
2019-08-07 11:40:43 +00:00
Simon Jakobi fc3f79a9df Make the number of QuickCheck tests overridable on the CLI (#1206)
You can now _increase_ the number of QuickCheck tests with
the --quickcheck-tests CLI option, e.g.

    cabal test dhall:tasty --test-options "--quickcheck-tests 1000000"
2019-08-07 06:33:06 +00:00
Simon Jakobi e39650ce7f Try to improve AppVeyor's dependency caching (#1207)
* This might fix a syntax problem:
  https://www.appveyor.com/docs/build-cache/#configuring-cache-items
  says:

      Note the use of single quotes around the entire line, when
      environment variables are used.

* This adds the AppVeyor config to the files which invalidate the cache
  when changed.

Context: #1063.
2019-08-07 05:21:58 +00:00
Simon Jakobi 0871fcd857 Prevent "Natural/subtract 0" from causing a panic (#1208)
Previously, normalizing `Natural/subtract 0` would result in this
error:

    ⊢ Natural/subtract 0

    Error: Compiler bug

    An ill-typed expression was encountered during normalization.
    Explanation: This error message means that there is a bug in the Dhall compiler.
    You didn't do anything wrong, but if you would like to see this problem fixed
    then you should report the bug at:

    https://github.com/dhall-lang/dhall-haskell/issues

    CallStack (from HasCallStack):
      error, called at src/Dhall/Eval.hs:865:38 in dhall-1.25.0-FCOZ7uxqivz8dkVwuN7aED:Dhall.Eval

This updates the dhall-lang submodule to include a new testcase added
in https://github.com/dhall-lang/dhall-lang/pull/692.
2019-08-07 02:38:56 +00:00
Simon Jakobi 4559a27bf3
Fix isNormalized for field selections (#1210)
In expressions like

    ({ x : Optional/fold } // {=}).x

isNormalized didn't check if the expression being selected from
was normalized.

Fixes #1209.
2019-08-07 03:44:21 +02:00
Simon Jakobi 1d58840feb
dhall-json: Nesting: Support empty alternatives as contents (#1204)
Closes #1201.
2019-08-06 13:24:18 +02:00
Gabriel Gonzalez d66d1db33f Fix `--version` flag handling for `dhall-json` package (#1199)
* Fix `--version` flag handling for `dhall-json` package

Fixes https://github.com/dhall-lang/dhall-haskell/issues/1198

This changes version to be a separate constructor for options parsing,
in order to make invalid states unrepresentable and to fix issues like
the above one.

* Undo `allowImports` changed

This was a change I forgot to stash while working on the fix for the
`--version` flag

* Fix missing `Paths_dhall_json` in `dhall-json.cabal`
2019-08-06 06:28:46 +00:00
Ollie Charles ae788fde89 Add bounds to either dependency (#1202)
`ealt` (which we use) is only available from version 5 up.
2019-08-06 00:48:48 +00:00
Simon Jakobi 59226c85bf Move unbalanced braces out of CPP (#1205)
This helps fast-tags parse the containing file
(See https://github.com/elaforge/fast-tags/issues/48)
2019-08-05 23:33:40 +00:00
Ollie Charles 4a93c255db Remove Dhall.X and replace with Data.Void (#1172)
* Remove Dhall.X and replace with Data.Void

This commit removes the Dhall.X module and the Dhall.X.X type,
preferring the use of Data.Void.Void. As I'm sure a lot of people are
actually using X, I've added a type-alias type X = Void. However,
pattern matching on X would be a breaking change.

Fixes #1120.

* Restore unsafeCoerce

* Fix regression

* Unused

* Reorganise exports

* Fix dhall-nix

* Another fix

* Fix Dhall.LSP.Backend.Typing

* Fix dhall-bash
2019-08-05 13:00:59 +00:00
Simon Jakobi 2cf6a1ba74
Update dhall-lang to latest master (#1200)
…to fix build failures due to the submodule pointing at an unreachable commit.

* Disable a currently failing testcase.
* Update the extra-source-files in dhall.cabal.
2019-08-05 02:16:41 +02:00
Gabriel Gonzalez 7f2f57f975
Add support for dependent types (#1164) 2019-08-03 21:38:01 -07:00
Gabriel Gonzalez 3d9a1d2a40 Improve error reporting for failed remote imports (#1188)
Several failed remote import messages didn't include the URL that
the interpreter failed to resolve.  This change fixes that and includes
some slight tweaks to improve consistency in how the messages are
formatted.
2019-08-03 12:18:10 +00:00
Simon Jakobi 1700fa72d8 Fix import logic with --file for dhall-to-{json,yaml} (#1191)
Fixes #1183.
2019-08-03 11:03:42 +00:00
Gabriel Gonzalez 3abef4e3f0 Enable `--records-strict` by default for `{json,yaml}-to-dhall` (#1181)
This adds a new `--records-loose` flag and changes the default behavior
to `--records-strict`

The rationale for this change is so that this default behavior helps
more when users are still experimenting with the appropriate type to
use to decode a large and messy YAML file.

For example, suppose a user is trying to translate the following YAML
to Dhall:

```yaml
foo: 1
bar: true
```

... and they start with a empty Dhall type which they plan to fix in
response to error messages.  They'd get a surprising success:

```bash
$ yaml-to-dhall '{}' < ./example.yaml
{=}
```

... because the old default behavior is to ignore extra fields in the
YAML.  However, if we're strict by default then users don't have to
apply the `--records-strict` flag to get feedback on what they need
to change.
2019-08-02 19:56:09 +00:00
Simon Jakobi f66918d8c8 Optimize a few Set instance (#1184) 2019-08-02 12:06:41 +00:00
Gabriel Gonzalez 15bf9c8e53
Fix standard version typo in `CHANGELOG` (#1180)
Fixes https://github.com/dhall-lang/dhall-haskell/issues/1168
2019-08-01 22:44:46 -07:00
Ollie Charles 1b683295fc Implement Natural/subtract (#1133)
* Implement Natural/truncatedSubtract

* Restore commented out code

* Add pretty printing for Natural/truncatedSubtract

* Flip the order of the arguments

* truncatedSubtract -> subtract

* Whitespace

* Whitespace

* Whitespace

* Whitespace

* Remove a try

* Fix Core.hs

* Add a case in Arbitrary (Expr s a)

* Fix Dhall.JSON

* lift2 -> lift0

* Update Dhall.Diff

* Add extra reduction rules

* Fix

* Update Core.hs

* Update dhall-lang submodule

* Updated dhall-lang

* Try rolling back the dhall-lang revision

* Correct isNormalized

* Add more isNormalized rules

* Update dhall-nix
2019-08-02 00:12:43 +00:00