Commit graph

81 commits

Author SHA1 Message Date
gb 2fadbe3090 add new nixstring version with warnings 2018-09-09 11:01:09 -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 60406a8ce5 Improve error reporting and value display in the REPL 2018-04-28 17:13:17 -07: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 709cc5247e Add code for doing Hindley-Milner type inference, and a repl
This code was written by Stephen Diehl and Kwang Yul Seo, which they released
under an MIT license as the project poly_constraints:

    https://github.com/kseo/poly_constraints

The code is added to hnix right now as mainly a placeholder, and will need to
be modified before it can be used.
2018-04-12 10:53:50 -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
John Wiegley 9d7f25d368 All is building with Megaparsec now, but many parsing tests fail 2018-04-09 17:12:16 -07:00
John Wiegley d964b7bb29 Allow expression trees to be deepseq'd 2018-04-09 02:07:40 -07:00