mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-11 13:48:34 +00:00
hs2js api docs
This commit is contained in:
parent
f54f80e698
commit
70e938b767
@ -1,8 +1,10 @@
|
||||
# hs2js
|
||||
|
||||
Experimental haskell in javascript interpreter.
|
||||
Experimental haskell in javascript interpreter. Many haskell features are not implemented.
|
||||
This projects mainly exists to be able to write and interpret [Tidal Cycles](https://tidalcycles.org/) code in the browser,
|
||||
as part of [Strudel](https://github.com/tidalcycles/strudel).
|
||||
|
||||
## Usage
|
||||
## Installation
|
||||
|
||||
### Via Script Tag
|
||||
|
||||
@ -47,3 +49,80 @@ document.getElementById('hello').addEventListener('click', () => {
|
||||
hs2js.evaluate('alert "hello from haskell!"');
|
||||
});
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
These are all functions exported by the package:
|
||||
|
||||
### evaluate
|
||||
|
||||
Evaluates a piece of haskell code
|
||||
|
||||
- `code`: [valid](https://github.com/tree-sitter/tree-sitter-haskell?tab=readme-ov-file#supported-language-extensions) haskell code
|
||||
- `scope`: global scope, defaults to globalThis. Allows you to pass an object of your own functions / variables from JS to Haskell.
|
||||
- `ops`: mapping for custom infix operator
|
||||
|
||||
Example:
|
||||
|
||||
```js
|
||||
// simple
|
||||
hs2js.evaluate(`2 + 2`).then(console.log) // log 4
|
||||
// passing variables via scope:
|
||||
hs2js.evaluate(`a + b`, { a: 1, b: 2 }).then(console.log); // logs 3
|
||||
// custom operator
|
||||
hs2js.evaluate(`2 |* 3`, {}, { '|*': (l, r) => l * r }).then(console.log); // logs 6
|
||||
```
|
||||
|
||||
### parse
|
||||
|
||||
[Parses](https://github.com/tree-sitter/tree-sitter-haskell) a piece of haskell code, returning its AST representation.
|
||||
|
||||
Example:
|
||||
|
||||
```js
|
||||
hs2js.parse(`2 + 2`).then(ast=>console.log(ast.toString()))
|
||||
// (haskell declarations: (declarations (top_splice (apply function: (variable) argument: (literal (integer))))))
|
||||
```
|
||||
|
||||
### run
|
||||
|
||||
Evaluates `rootNode` of haskell AST (used by evaluate internally).
|
||||
|
||||
- `rootNode`: haskell AST root node, as returned by `parse`
|
||||
- `scope`: see evaluate
|
||||
- `ops`: see evaluate
|
||||
|
||||
Example:
|
||||
|
||||
```js
|
||||
async function main() {
|
||||
const ast = await hs2js.parse(`2 + 3`);
|
||||
const res = hs2js.run(ast.rootNode);
|
||||
console.log(res);
|
||||
}
|
||||
main(); // logs 5
|
||||
```
|
||||
|
||||
### loadParser
|
||||
|
||||
Loads and caches the parser by fetching `tree-sitter.wasm` and `tree-sitter-haskell.wasm`.
|
||||
This function is called internally by `parse` but calling it yourself might make the parser be ready faster, depending on your application.
|
||||
|
||||
```js
|
||||
hs2js.loadParser().then(() => console.log('parser loaded'))
|
||||
```
|
||||
|
||||
### setBase
|
||||
|
||||
Sets the base path where the WASM files are expected by `loadParser`. Defaults to `/`.
|
||||
Expects `tree-sitter.wasm` and `tree-sitter-haskell.wasm` to be present.
|
||||
Can either be a relative path or a URL.
|
||||
|
||||
```js
|
||||
hs2js.setBase('https://unpkg.com/hs2js@0.0.4/dist/');
|
||||
hs2js.loadParser();
|
||||
/* loads
|
||||
- https://unpkg.com/hs2js@0.0.4/dist/tree-sitter.wasm
|
||||
- https://unpkg.com/hs2js@0.0.4/dist/tree-sitter-haskell.wasm
|
||||
*/
|
||||
```
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "hs2js",
|
||||
"version": "0.0.4",
|
||||
"version": "0.0.5",
|
||||
"description": "Experimental Haskell in JavaScript interpreter",
|
||||
"main": "dist/index.js",
|
||||
"module": "dist/index.mjs",
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user