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.
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
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))
>
To run snapshots, run npm run test
.
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 spago -x test-snapshots/spago.dhall install <packages...>
. The snapshots have their own spago.dhall
file so as not to pollute the purescm
binary with unneeded dependencies.