db050668d1
toFunction additive multiplicative compact whitespace pow relational equality boolean whitespace separator left associative operators expression not identifier function call array constructor string indexed values ident priority block outerBlock optional final expression statement separator outerBlock innerBlock better errors note xor white space and record unary minus inner/outer block statement lambda sort lambda is a value constructor lambdaCall ternary ternary basicValue cleanup quotes chained Functions dot operators unify unary operators unify unary operatos notes notes notes notes parser priorities set white space or newline defined allow newlines notes function call has become a post operator recordElement recursive index postOperatorToFunction better integer comments notes record priority comment atom finalComment generated parser type cast format initiate test file test initiated; todo nodeCall; nodeExpression callIdentifier recover extra initiate testing initial tests pass tests pass remove function node ternary test parse passed to tests pass notes sort toExpression format notes remove unused modules remove unnecessary nodeLambdaCall notes note fix construct array comment test todo elixir pipe fix toString notes initial to expression test value test parsing records records comments ternary ifthenelse inner block passed inner block lambda lambda new parser tested now test tricks ternary in expression to test lambda as argument to test lambda in structures Use peggy Parser expectEvalError macros tested remove mathjs parse reducer test comparison operator |
||
---|---|---|
.. | ||
__tests__ | ||
benchmark | ||
src | ||
.gitignore | ||
.npmignore | ||
.prettierignore | ||
bsconfig.json | ||
jest.config.js | ||
lint.sh | ||
package.json | ||
README.md | ||
tsconfig.json | ||
webpack.config.js |
Squiggle language
An estimation language
Use the npm
package
For instance, in a javascript project, you can
yarn add @quri/squiggle-lang
import { run } from "@quri/squiggle-lang";
run(
"normal(0, 1) * fromSamples([-3,-2,-1,1,2,3,3,3,4,9]"
).value.value.toSparkline().value;
However, for most use cases you'll prefer to use our library of react components, and let your app transitively depend on @quri/squiggle-lang
.
Build for development
We assume that you ran yarn
at the monorepo level.
yarn build
yarn bundle
is needed for a deployment.
Other:
yarn start # listens to files and recompiles at every mutation
yarn test
# where o := open in osx and o := xdg-open in linux,
yarn coverage:rescript; o _coverage/index.html # produces coverage report and opens it in browser
Distributing this package or using this package from other monorepo packages
As it says in the other packages/*/README.md
s, building this package is an essential step of building other packages.
Information
Squiggle is a language for representing probability distributions, as well as functions that return probability distributions. Its original intended use is for improving epistemics around EA decisions.
This package, @quri/squiggle-lang
, contains the core language of squiggle. The main feature revolves around evaluating squiggle expressions. Currently the package only exports a single function, named "run", which from a squiggle string returns an object representing the result of the evaluation.
If using this package for tests or as a dependency, typescript typings are available and recommended to be used.
This package is mainly written in ReScript, but has a typescript interface.
ReScript has an interesting philosophy of not providing much in the way of effective build tools. Every ReScript file is compiled into .bs.js
and .gen.ts
files with the same name and same location, and then you can use these files in other .js
files to create your program. To generate these files to build the package, you run yarn build
.
.gen.ts
files are created by the @genType
decorator, which creates typescript typings for needed parts of the codebase so that they can be easily used in typescript. These .gen.ts files reference the .bs.js files generated by rescript.