Install requisites:
chezscheme
- you should have thescheme
command available in your$PATH
.libpcre2
-purescm
has a runtime dependency on the 16-bit variant of pcre2. Check your package manager forpcre2
orpcre2-16
or similar.icu
-libicu
is used for locale-aware case conversions.
You can install purescm with npm:
npm i --global purescm
The best way to use purescm
is to use the spago integration for alternative PureScript backends. In spago.yaml
use the backend
config like so:
workspace:
backend:
cmd: purescm
args:
- "build"
Then to compile your purescm
project you can run:
spago build
This will produce output under output/
. You can run the compiled program with:
purescm run
Scheme files can be precompiled to a single Chez program:
purescm bundle-app
which generates a single file output/main
which can be run with scheme
or petite
:
scheme --program output/main
To run all tests, run npm run test
. This will run both the scheme runtime unit tests and the snapshot tests.
To overwrite old snapshots with the latest output, run npm run test -- -a "--accept"
.
To add a new snapshot, create a file called Snapshot.X.purs
where X
indicates what is being tested.
If a snapshot needs a dependency, install it by running cd test-snapshots && spago install <packages...>
.
In order to represent Array
and record types in purescm
, the backend has a runtime dependency on implementation of SRFI 214 (Flexvectors). This is due in part to how vectors are more like "arrays" than "array lists".
We vendor chez-srfi using the following steps:
-
Clone
chez-srfi
at the project root. -
Navigate to
chez-srfi
and run./install.chezscheme.sps ../vendor
. This should produce ansrfi
folder inside ofvendor
. -
Copy the desired SRFIs from
vendor/srfi
intovendor/purs/runtime/srfi
. Make sure to also copy the SRFIs and other scheme files (e.g. the ones in theprivate
folder) that they depend on. The library-requirements function can aid in this process. -
Modify the copied scheme files such that the library names align with the folder structure.
sd
makes this easy!
sd "\(srfi " "(purs runtime srfi " vendor/purs/**/*.sls
- To verify, simply invoke the Scheme REPL:
$ scheme --libdirs ./vendor:
Chez Scheme Version 9.5.8
Copyright 1984-2022 Cisco Systems, Inc.
> (import (purs runtime srfi :125))
>