Commit Graph

239 Commits

Author SHA1 Message Date
John Wiegley 77c52fd43c Revise Nix.Standard 2019-03-23 00:49:03 -07:00
Greg Hale 8029d6c2cd Tweak cabal file and default.nix for ghc844 support 2019-03-21 09:13:00 -04:00
Greg Hale 522b24e969 Fix dependency bounds 2019-03-19 21:52:55 -04:00
Greg Hale ccfaae70fe Add conservative dependency bounds to all dependencies 2019-03-19 21:20:05 -04:00
John Wiegley 2c0c896871
Everything compiling again, but 25 tests failing 2019-03-18 17:30:31 -07:00
John Wiegley df3e79d945
Port over most of Builtins.hs 2019-03-18 15:27:12 -07:00
John Wiegley 522585a7f1
Begin work on harmonizing the two different value representations 2019-03-18 11:41:46 -07:00
John Wiegley f5d070af16
Bump version to 0.6.0 2019-03-17 23:07:27 -07:00
John Wiegley 18c49f6a0d
Reorganize code in Nix.Value, creating new Nix.Value.Equal 2019-03-17 22:44:22 -07:00
John Wiegley 7b5d134d22
Factor out FreshIdT from Standard 2019-03-17 19:04:38 -07:00
John Wiegley 015ced236e
Simplify Standard by splitting off Cited.Basic 2019-03-17 18:43:23 -07:00
John Wiegley 145e69c9a4
Further work on Standard.hs 2019-03-15 22:54:29 -07:00
John Wiegley 209a9ae9a5
Create Nix/Thunk/Standard.hs 2019-03-15 17:59:38 -07:00
John Wiegley e9236aa55c
Now down to Main.hs and the tests 2019-03-15 17:20:10 -07:00
John Wiegley 28a1410013
Split off NCited into its own file 2019-03-12 07:21:24 -07:00
John Wiegley 3cb9834792
Begin abstracting the thunk/value data representation 2019-03-11 22:41:56 -07:00
John Wiegley 39fd51c1a8 Split Nix.Thunk into Nix.Var, Nix.Thunk and Nix.Thunk.Basic
This is in preparation for further generalization of the thunk/value scheme
used by the execution code.
2019-03-11 08:42:46 -07:00
John Ericson 5ddb79009d Depend on hnix-store-core and use it for `printHash32` 2019-03-10 08:59:05 -07:00
John Wiegley eae6bf542f Split MonadFreshId off into its own file 2019-03-10 08:58:27 -07:00
John Wiegley 23aae87db7
Merge pull request #463 from kmicklas/remove-hspec-discover
Remove unused dependency on hspec-discover
2019-03-10 08:35:13 -07:00
Ken Micklas 81f702f98d Remove unused dependency on hspec-discover 2019-03-09 22:33:32 -05:00
Ken Micklas 3a7b023464 Remove monad-st dependency 2019-03-09 21:31:42 -05:00
John Ericson 3b5649c0a2 WIP fix equality 2019-03-09 20:26:19 -05:00
John Wiegley ed12ee1077
Disable using ghc-datasize for now 2019-01-08 10:22:39 -08:00
Doug Beardsley 7d2f9d874a Move json code into separate module 2018-12-09 13:57:58 -05:00
Félix Baylac 512a8e0f10 Change builtins.storeDir type to String
Co-authored-by: Basile Henry <bjm.henry@gmail.com>
2018-12-02 20:59:50 +00:00
John Wiegley 01e805e106
Update default.nix to use megaparsec 7.0.4 2018-11-22 09:53:04 -08:00
John Wiegley 2447e7e044
Remove the use of hpack
Fixes #411
2018-11-22 09:15:50 -08:00
John Wiegley e0669ce3c3
Merge branch 'master' into doOptimize-doProfiling 2018-11-22 08:57:09 -08:00
Domen Kožar ef3bc04a7c
Be able to pass doOptimize/doProfiling flags to nix build 2018-11-22 09:53:43 +00:00
Vaibhav Sagar 017ce7667a Bump Megaparsec to 7.0.4 2018-11-22 01:16:11 -05:00
John Ericson f227911ce0 Merge remote-tracking branch 'origin/master' into prettyprinter 2018-11-20 18:23:15 -05:00
John Wiegley ba5b23a6e3
Bump minimum supported version to GHC 8.4.4 2018-11-19 09:46:02 -08:00
John Ericson 04abd357bd Switch to prettyprinter 2018-11-17 12:02:26 -05:00
Ryan Trinkle 6d2daf0ecd WIP: Refactor MonadVar to use ref-tf's MonadRef instead
TODO:
* Upstream GEq (STRef s)
* Eliminate shim functions
2018-11-16 14:11:37 -05:00
gb 4baa4f7108 change Nix.NixString module to Nix.String 2018-09-23 16:03:44 -04:00
gb 6f1ed3c2e9 documented methods;added more methods with deprecation 2018-09-15 20:04:54 -04:00
gb a57aa711df tests run 2018-09-09 11:47:04 -04:00
John Wiegley b9b0723037
Update hnix.cabal 2018-08-23 21:06:56 -07:00
John Wiegley f0b6b6b223
Change NValueNF to use Free instead of Fix
This allows us to detect and report cycles during normalization.

See #348
2018-08-09 22:09:00 -04:00
gb fd2bbb66e9 fixes to match latest master: tests ran 2018-07-28 15:32:15 -04:00
John Wiegley 9ed0597e40
Update default.nix and .cabal file 2018-07-25 11:53:48 -07:00
John Wiegley 4fffd51438
Bump version to 0.5.2, regenerate hnix.cabal 2018-07-19 15:15:25 -07:00
John Wiegley 578a3551c9
Merge remote-tracking branch 'origin/master' into pending 2018-07-19 15:14:16 -07:00
Silvan Mosberger 69dcb30c89
Loosen deriving-compat bounds 2018-07-19 19:30:57 +02:00
John Wiegley c060fa9d4e
Corrections to default.nix 2018-07-17 13:31:29 -07:00
John Wiegley 2a598d539e
Merge remote-tracking branch 'origin/master' into pending 2018-07-17 11:39:04 -07:00
John Wiegley 74df7d67f1
Add a build-tool-depends section to package.yaml 2018-06-27 12:51:34 -07:00
John Wiegley b0826b9166
Use megaparsec 6.5.0 2018-06-27 11:36:04 -07:00
Félix Baylac-Jacqué 721ddd4f53
Test NSelect reduction 2018-06-25 17:19:39 +02:00
John Wiegley 471712f11f
Switch PrettyPrintTests from QuickCheck to Hedgehog
The reason being that we get better shrinking by default, and no orphan
instances.
2018-05-14 21:22:04 -07:00
John Wiegley eef2ec2512
Only use compact with GHC 8.2, as per the documentation for compact 2018-05-10 16:12:42 -07:00
John Wiegley 892ce63e1a
Don't guard compact based on the version 2018-05-10 15:35:31 -07:00
John Wiegley 865984b428
Permit building with GHC 8.0, extend the Travis build matrix 2018-05-10 15:07:32 -07:00
John Wiegley 14138bfc97
Update GitHub link to point to haskell-nix 2018-05-10 13:57:53 -07:00
John Wiegley dbd8468862
In Builtins.hs, just include derivation.nix directly 2018-05-10 13:51:14 -07:00
John Wiegley addea54208
Add more missing files 2018-05-09 10:59:08 -07:00
John Wiegley f5155a12dd
Add files missing from Hackage tarball, bump to 0.5.1 2018-05-09 10:43:25 -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 ce3b0d70e9
Move all of the parsing code into a single module, for optimization 2018-05-07 12:06:56 -07:00
John Wiegley 2457efdaa3
Only invoke pretty/parser tests if PRETTY_TESTS=<N> for some N>0 2018-05-06 22:13:30 -07:00
John Wiegley 1895cff9cc Update hnix.cabal 2018-05-06 10:43:51 -07:00
John Wiegley e7a6456a35 Make use of lens-family to provide some utility lenses/traversals 2018-05-06 10:43:43 -07:00
Matthew Pickering b0ed29b3df Add QuickCheck test for pretty printer and parser
I have not spent any time optimising the generated programs but they do
not look totally unreasonable from a cursory inspection.

Fixes #158
2018-05-06 10:31:52 +00:00
John Wiegley a627d885e8 Implement builtins.fetchurl
Squashed commit of the following:

commit 15b10d898e0457237f07cda9e5e9525bac0e95f6
Author: John Wiegley <johnw@newartisans.com>
Date:   Wed May 2 16:33:30 2018 -0700

    Update Exec.hs

commit d4a886dccf2715f1c1790e01adc242c352e7f427
Merge: 02afb27 4caacc1
Author: John Wiegley <johnw@newartisans.com>
Date:   Wed May 2 16:08:55 2018 -0700

    Merge branch 'master' into http

commit 02afb275f2078c1184a901da3ea0262630fefeea
Author: John Wiegley <johnw@newartisans.com>
Date:   Wed May 2 16:08:42 2018 -0700

    Update Exec.hs

commit 3733ce5888adb7161d2f57a16204ab953e9c4d7d
Author: John Wiegley <johnw@newartisans.com>
Date:   Wed May 2 16:07:08 2018 -0700

    Update Builtins.hs

commit 4402be6d04ac34156d50f8ee29f9af300de75ce5
Merge: 2c60097 13f3ebd
Author: John Wiegley <johnw@newartisans.com>
Date:   Wed May 2 15:06:28 2018 -0700

    Merge branch 'master' into http

commit 2c600976bb3a5d9267a0f313487dd0ab1a6ce1f7
Merge: 4a9d1a5 555ce95
Author: John Wiegley <johnw@newartisans.com>
Date:   Wed May 2 14:25:59 2018 -0700

    Merge branch 'master' into http

commit 4a9d1a56d463567ad155a58fc39f5b24e2636120
Merge: 4dd46f2 431006f
Author: John Wiegley <johnw@newartisans.com>
Date:   Wed May 2 14:20:57 2018 -0700

    Merge branch 'master' into http

commit 4dd46f21e3f594c4f7ae5bee8412a7841e566d4c
Author: Ian-Woo Kim <ianwookim@gmail.com>
Date:   Sun Apr 29 12:51:11 2018 -0700

    generated hnix.cabal

commit c87ae993fb7dbb1117f03133862799e1549c4259
Author: Ian-Woo Kim <ianwookim@gmail.com>
Date:   Sat Apr 28 16:55:11 2018 -0700

    remove dep from hnix.cabal

commit 0bb8856c8759ad3c67a0b4eb1d26b6195da82667
Author: Ian-Woo Kim <ianwookim@gmail.com>
Date:   Sat Apr 28 16:53:54 2018 -0700

    remove http-client stuff from default.nix

commit d298756a2ba4376f8cb3c54fb723a00697e0821d
Author: Ian-Woo Kim <ianwookim@gmail.com>
Date:   Sat Apr 28 15:49:59 2018 -0700

    getURL is implemented for both http and https

commit a3d66c07a097aedb03f30bcc636fcb3d5717e1fe
Merge: c4cb48a a73eae5
Author: Ian-Woo Kim <ianwookim@gmail.com>
Date:   Sat Apr 28 15:14:32 2018 -0700

    Merge branch 'builtin2' into http

commit c4cb48a8a756e82fb7d389ff501b2a85001dba38
Author: Ian-Woo Kim <ianwookim@gmail.com>
Date:   Sat Apr 28 15:13:25 2018 -0700

    add getURL function

commit ff23fc18ed16075353a58725d7d08f41605a6070
Author: Ian-Woo Kim <ianwookim@gmail.com>
Date:   Sat Apr 28 15:06:40 2018 -0700

    use http-client-* instead of HTTP

commit fcbe40f3bea84607a9d7849a9f3d2fc3a6cb9bef
Author: Ian-Woo Kim <ianwookim@gmail.com>
Date:   Sat Apr 28 14:58:07 2018 -0700

    add HTTP

commit a73eae573a193dbb8361e03b584a6cd55e7c427a
Author: Ian-Woo Kim <ianwookim@gmail.com>
Date:   Sat Apr 28 14:36:24 2018 -0700

    implement fetchurl (as a copy of fetchTarball)
2018-05-02 21:38:39 -07:00
hsloan c1561ea711 Implement builtins.currentTime 2018-05-02 21:32:00 -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 f662d44c56 Hindley-Milner is close to working, just the MonadFix problem again 2018-04-30 21:52:25 -04:00
John Wiegley bda103bc11 Don't include ghc-datasize if --flags=profiling is set 2018-04-30 21:48:45 -04:00
John Wiegley 7f01cc8bb8 valueSize will not work with GHC 8.4 right now
ghc-heap-view hasn't been updated yet
2018-04-28 18:29:37 -07:00
John Wiegley 8d0a67b52c Only turn on -Werror for Travis 2018-04-28 18:21:24 -07:00
John Wiegley b24598b3a3 Add top-level __valueSize
Fixes #253
2018-04-28 17:12:32 -07:00
John Wiegley ad18b950ac Turn warnings into errors 2018-04-28 16:26:32 -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 05ca87a732 Several improvements to error reporting; add new --thunks option 2018-04-25 13:00:41 -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 a60181df3a Add --flags=optimize for cabal configure 2018-04-22 14:33:38 -07:00
John Wiegley 96a0c387dd Merge Nix.Trace and Nix.Reduce into Nix.Reduce
Since almost all of that code had to do with program reduction. addTracing and
tracingEvalExpr have moved into Exec.hs, since they depend on MonadNix.
2018-04-21 10:28:09 -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 86b09103d6 Move production of a reduced test case to --reduce, improve --trace 2018-04-20 22:36:40 -07:00
John Wiegley 47e8829a28 Rename Nix.StringOperations to Nix.Strings 2018-04-20 17:05:21 -07:00
John Wiegley 986a3043da Add a constant-folding tree transformer: Reduce.reduceExpr 2018-04-20 02:57:23 -07:00
John Wiegley 0ff6c7a1e4 Move tracing code into its own file 2018-04-18 21:43:18 -07:00
John Wiegley 92217059b5 Add --flags=tracing, and document it in README.md 2018-04-18 16:28:21 -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 f4fbbe7903 Make NKeyName and NString instances of Hashable 2018-04-17 11:33:20 -07:00
John Wiegley 6c9cbf241a Rewrite ToNix/FromNix, although Builtins.hs is not using it yet 2018-04-13 18:09:12 -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 96df58fb29 Split off command-line options processing into a new Nix.Options module 2018-04-11 20:53:38 -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 cd4aa33abd Run the tests with threading enabled, for parallel execution 2018-04-11 13:53:55 -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 5efa46e516 Add Binary instances for NExpr 2018-04-10 18:57:17 -07:00
John Wiegley dcd081d899 Add directory dependency for the tests 2018-04-10 12:38:14 -07:00
John Wiegley a7e7e84795 Drop dependency on insert-ordered-containers
Fixes #161
2018-04-10 11:58:08 -07:00