Last updated: 2019-01-08 08:15:38 +0000
Upstream URL: git clone http://chriswarbo.net/git/ml4hsfe.git
Contents of README follows
This repository provides a recurrent clustering algorithm, which assigns feature vectors to Haskell Core syntax trees. This works by turning the tree structure into a (left-biased) matrix then concatenating the rows. Each symbol in the tree is given a number (feature): keywords use hard-coded numbers, whilst names are dereferenced to get their syntax trees, grouped into clusters based on the features of those trees, and the index of the cluster is used as the feature.
This is a normal Haskell project using the Cabal build system. We
also provide definitions for the Nix package manager and a benchmark
suite for the Airspeed Velocity (ASV) framework (using the
asv-nix
plugin).
asv.conf.json
is the Airspeed Velocity
configuration. It sets up the benchmark suite in
benchmarks/
benchmarks/
defines our benchmarks. The
default.nix
file will be loaded for each git revision, and
defines a python
executable whose environment contains
values, commands, etc. from that revision for use by the benchmark
scripts (the *.py
files).
overlay.nix
is a Nix overlay, providing (among other
things) a Haskell package set containing this ML4HSFE
package, a standalone ML4HSFE
package taken from that set
and an instantiation of the test.nix
tests.
overlayed.nix
applies our overlay to a pinned
version of Nixpkgs. This should work regardless of what version your
system provides.
release.nix
chooses those packages from
overlayed.nix
which we want to build and provide via
continuous integration.
tests.nix
contains some integration tests which
can’t be run from the Cabal test suite.
The included shell.nix
file provides suitable versions
of GHC and asv. During development I use ghcid to build and run tests
after each save. I find the following .ghcid
file works
well:
--command="nix-shell --run 'cabal new-repl'"
--test=":! cabal new-test"
The call to nix-shell
ensures that the GHC defined in
shell.nix
is used, and cabal new-repl
invokes
GHCi with this library in scope. The contents of the --test
option will be sent to GHCi whenever the project is successfully
built/loaded. We use :!
to invoke a shell command, and
cabal new-main
is the command to run the test suite.