Makefile now has two modes depending on whether PREFIX is set. If it's
not, we try to make the distribution as relocatable as possible, meaning
we don't rely on the baked-in-by-cabal data directory. If it is set, we
do use that path.
- update copyright date
- point to new Haskell.org downloads rather than HP
- new WiX version
- smoke test subsumes `:prove True`
- repo layout simpler (no `notebook`, `sbv` subdirs)
- no notebook documentation
Closes#112.
This adds a check at REPL startup that `cvc4` is an executable on the
path. It doesn't check for versions, as we're mostly stuck with
"prerelease" versions.
I made it easy to add more smoke tests at startup; we should add these
as we think of them.
We previously read a batch script from `$HOME/.cryptol` on REPL startup,
but this turns out to conflict with the directory returned by
`System.Directory.getAppUserDataDirectory`.
This commit changes the name to `.cryptolrc` and updates the interpreter
flags and such accordingly.
This involved:
- Moving a couple REPL modules into the Cryptol library hierarchy (those
that don't depend on console libraries)
- Splitting up the Makefile, which unfortunately resulted in a lot of
not-quite-duplication between the two Makefiles. Let's look into
better abstraction...
- Introduce monad type SpecT m a = StateT SpecCache (ModuleT m) a
(easier to call from code written in ModuleT monad)
- Fix bug where specializing expressions under ETAbs could cause
type variables to `escape` from their scopes.
- Function `withDeclGroups` lets you run arbitrary specializer monad
action within the context of a set of DeclGroups. This is used to
implement specialization of where-expressions, and also for the new
function `specializeDeclGroups`, which specializes a set of DeclGroups
using the monomorphic bindings as the 'root set' to determine what
other specialized bindings to include.
Previously we were just using Prelude's `readFile`, which uses the
system default locale. This meant that people writing Cryptol in other
locales might produce source files that work fine for them but not
others. Now the interpreter sets the default locale to utf8 at startup.
Additionally, the code to catch exceptions from loading modules was too
lazy, allowing exceptions to bring down the whole process when the
module contents were forced outside of the `try`.
We also assumed that any IO exception was from files not being found;
there's now an "Other IO exception" possiblity. Incorrect locales will
trigger this alternative because the actual IOException raised isn't
specific to locale errors.
Revised how we do output for `:sat` and `:prove` without arguments,
making it more clear what properties are being checked in each case.
Also reworded the output of `:check` slightly in the case where the
property has no inputs. It would be nice to make `:check` output more
consistent with the others.
Fixes a bug pointed out by @weaversa:
https://github.com/GaloisInc/cryptol/issues/127#issuecomment-64464455
In addition to the other search path changes in #127, we now will add
the directory containing files to be loaded to the search path. This
applies to:
- files loaded with a command line argument, like in the original
comment
- arguments to `:l`, so for example `:l examples/DES.cry` would work
- batch file arguments, so for example running `cryptol -b
/some/path/bar.cry` adds `/some/path` to the search path.
By popular demand and general consensus (#163), defaulting and shadowing
warnings are now off by default in the notebook. They can be reenabled
by using `:set` in a cell much like they can be toggled at the command
line.
The main reason for this change is that we can't help but emit all of
the warnings for the entire module context whenever any part of that
module changes. If we could focus the warnings so that they're only
relevant for this particular cell, we should probably reenable them by
default.
This commit brings the notebook into the rest of the distribution
infrastructure set up for cryptol. The main points are:
- new icryptol-kernel executable
- new icryptol shell script that wraps ipython and makes sure the
cryptol profile is set up
- Makefile target for friendly local testing (`make notebook`)
- moved example notebooks to examples subdirectory
Now, the notebook interface runs its own ZeroMQ interface using the
EasyKernel module that is now exported from IHaskell's underlying
ipython-kernel library. This eliminates the line protocol with the
Python wrapper, and it should work on Windows (though it is not tested
there).
Part of this involved making the REPL monad able to change the IO action
used to print strings.
Continuing issues and improvment possibilities are in the issue tracker
- see issue #75 for a starting point.