Commit Graph

81 Commits

Author SHA1 Message Date
Shea Levy
2bba6c84e6
Revert "Fix compilation"
This fix isn't necessary now that the XML context change is
reverted.

This reverts commit 51d493f484.
2018-11-27 14:22:04 -05:00
Domen Kožar
51d493f484
Fix compilation 2018-11-25 10:01:14 +00:00
Domen Kožar
c450af4dcd
repl: add welcome text and :help command 2018-11-24 20:17:45 +00:00
John Ericson
04abd357bd Switch to prettyprinter 2018-11-17 12:02:26 -05:00
John Wiegley
582a2b0a76
Make 'builtins' available in the repl 2018-08-04 17:34:50 -04:00
John Wiegley
b186e44174
--force was a needless duplicate of --strict 2018-05-09 13:52:34 -07:00
John Wiegley
ba0dc19d2d
Work from mightybyte: Minimize deps required, for building with GHCJS 2018-05-08 16:41:15 -07:00
John Wiegley
1a376598a6
Pretty print expressions when using -v5 and just --parse 2018-05-06 22:13:44 -07:00
hsloan
c1561ea711 Implement builtins.currentTime 2018-05-02 21:32:00 -07:00
John Wiegley
fe4629c3a4 More fixes to type inference 2018-05-02 15:08:53 -07:00
John Wiegley
ee8ba02dfd Much more work on type inference; report multiple possible types
This is needed because of a function like this:

    x: y: x + y

This is polymorphic, but over exactly four possibilities:

    int   -> int
    int   -> float
    float -> int
    float -> float

The "type" is really the combination of the four, since we don't yet have a
mechanism like type classes, which could have rendered this as a single type:

    (Num a, Num b) => (x :: a): (y :: b): x + y

Going this route will require that we manage an implicit type classes
hierarchy, and perform unification on constraints as well as types. In the
interim, I just lifted the unification algorithm into the LogicT monad, and
use back-tracking search to find all the possible types an expression could
be.

The main problem with using LogicT, however, is that there are many types
it *couldn't* be, and in the case of a unification failure, it not yet clear
what the type should have been.  For example:

    "foo" + 2

Should the string have been a float or an integer or a path? Or should the
integer have been a string? So for now we report all the possibilities, since
it's not obvious which part of the expression is in error:

    hnix: Type error: TypeInferenceErrors
      [ UnificationFail (TCon "integer") (TCon "string")
      , UnificationFail (TCon "string") (TCon "path")
      , UnificationFail (TCon "string") (TCon "float")
      , UnificationFail (TCon "string") (TCon "integer")
      ]

This is a case where enumerating types rather than trying to make them compact
using type classes might actually be an improvement, since the errors here
would have been only slightly less numerous:

    string  != Num a => a
    string  != path
    integer != string

Clearly a better reporting mechanism is needed to clarify these problems. I
can imagine that in an IDE, there would be a squiggly under both sides of the
expression, each suggesting the type that was expected for that argument under
the assumption that the other argument (the one not be inspected) was the
correct one.
2018-05-01 20:49:10 -04:00
John Wiegley
9b02ad780f Pretty print type errors a little better (but more work needed) 2018-05-01 20:35:01 -04:00
John Wiegley
f662d44c56 Hindley-Milner is close to working, just the MonadFix problem again 2018-04-30 21:52:25 -04:00
John Wiegley
b8307d2fb5 Initial version of the attribute finder, still needs tweaking
```
hnix -I nix=$PWD/data/nix/corepkgs --find \
  --eval --expr "import $HOME/src/nix/nixpkgs {}" \
  -A pkgs.haskellPackages
```
2018-04-30 21:48:45 -04:00
John Wiegley
100c41db6d Run the repl in the same MonadNix environment as Main.hs
Fixes #204
2018-04-28 16:26:32 -07:00
John Wiegley
ad0a53ed24 Fix two invalid function references 2018-04-27 21:00:45 -07:00
John Wiegley
0a21eb755c A minor naming change for consistency 2018-04-27 20:08:47 -07:00
John Wiegley
6c2149f767 Remove code TODOs, which have been changed into GitHub issues 2018-04-26 17:13:22 -07:00
John Wiegley
defc5ed66d Add a new --values option for selectively displaying value provenance 2018-04-25 20:49:16 -07:00
John Wiegley
05ca87a732 Several improvements to error reporting; add new --thunks option 2018-04-25 13:00:41 -07:00
John Wiegley
2a61ed7307 Fix to value rendering (though won't work with scripting yet) 2018-04-25 00:03:17 -07:00
John Wiegley
2de8c7cf84 More fixes to error reporting 2018-04-24 12:25:40 -07:00
John Wiegley
01bcb86d3f Further improvements to error rendering, but not all done yet 2018-04-24 11:12:20 -07:00
John Wiegley
9864a8c7a5 Rework the way that info frames and error are handled
There is still work to be done to render the new "typed frames", and to
convert all the current string based frame into typed frames. This will pave
the way forward to smarter error messages that can be browsed in intelligent
environments like Emacs and the browser.
2018-04-24 02:15:28 -07:00
John Wiegley
8a93068102 Rename Nix.Core back to Nix.Eval, since Nix.Eval was now almost empty 2018-04-21 10:11:34 -07:00
John Wiegley
35d669e55c Add a missing call to withNixContext in Main.hs 2018-04-21 00:48:04 -07:00
John Wiegley
86b09103d6 Move production of a reduced test case to --reduce, improve --trace 2018-04-20 22:36:40 -07:00
John Wiegley
2c80225241 Add a new --trace option, separate from verbosity levels 2018-04-18 23:20:58 -07:00
John Wiegley
dfe9869472 Add new option --force, which forces evaluation results to normal form 2018-04-17 18:12:19 -07:00
John Wiegley
c3f34e62ce Use verbosity to control how much is displayed in error messages 2018-04-17 17:25:59 -07:00
John Wiegley
8d25aa461d Add --json option to hnix, which can render both expressions and values 2018-04-17 14:24:52 -07:00
John Wiegley
dacd0ca0db Restore the "normal form recursive" ToNix/FromNix type classes
This allows for very easily written Builtins
2018-04-15 20:43:04 -07:00
John Wiegley
42c0503de8 Move more code into Nix.Entry, to better support the tests 2018-04-15 02:02:26 -07:00
John Wiegley
4f17250d11 More simplifying of imports 2018-04-14 09:44:55 -07:00
John Wiegley
58b65d2ce1 Don't evaluate to normal form by default in the top level evaluators 2018-04-13 19:29:18 -07:00
John Wiegley
99189e9536 The basic REPL now works; doesn't allow establishing definitions yet 2018-04-12 16:46:34 -07:00
John Wiegley
9a089712aa Create new __includes builtin, set by --include/-I 2018-04-11 22:02:31 -07:00
John Wiegley
371380c98f Add support for the --attr/-A option 2018-04-11 21:31:48 -07:00
John Wiegley
96df58fb29 Split off command-line options processing into a new Nix.Options module 2018-04-11 20:53:38 -07:00
John Wiegley
f3ee76f4ae Support handling of --arg and --argstr, though with some changes
optparse-applicative can't really support "--arg name value", so instead we
require "--arg name=value", printing an error message if the user attempts the
former.
2018-04-11 20:46:52 -07:00
John Wiegley
b621ffee0a Move the caching support code into its own Nix.Cache module 2018-04-11 20:21:02 -07:00
John Wiegley
22175aa927 Use the serialise library on non-Linux systems, compact on Linux 2018-04-11 17:59:42 -07:00
John Wiegley
941d4f9fd3 Add testing code for writing out Nix parses as compact regions 2018-04-11 14:35:17 -07:00
John Wiegley
c2aaec0e9e Read in --arg and --argstr options, but don't handle them yet 2018-04-10 21:29:48 -07:00
John Wiegley
74de14dc7d Restore the linter, to some degree, at least for the language tests 2018-04-10 21:02:01 -07:00
John Wiegley
9d8c90efbf Add a --parse flag that currently does nothing; change -e to -E 2018-04-10 17:42:35 -07:00
John Wiegley
91b33e250d Report evaluation errors nicely from Main.hs
Fixes #156
2018-04-10 12:25:34 -07:00
John Wiegley
bf4ab0e4a8 Add an --ignore-errors option to the hnix executable 2018-04-10 09:02:02 -07:00
John Wiegley
2694f6ffaf More work on the megaparsec parser 2018-04-10 08:34:21 -07:00
John Wiegley
8f37f37986 Down to 16 basic test failures with megaparsec 2018-04-09 21:35:46 -07:00