squiggle/packages/squiggle-lang/src/rescript/Reducer
2022-09-11 19:22:07 +04:00
..
Reducer_Bindings WIP (basic functionality, stdlib not converted yet) 2022-09-11 19:22:07 +04:00
Reducer_Dispatch WIP (basic functionality, stdlib not converted yet) 2022-09-11 19:22:07 +04:00
Reducer_Expression WIP (basic functionality, stdlib not converted yet) 2022-09-11 19:22:07 +04:00
Reducer_Extra spell check 2022-07-16 17:09:39 +02:00
Reducer_Js PR comments 2022-06-24 12:15:38 +02:00
Reducer_MathJs PR comments 2022-06-24 12:15:38 +02:00
Reducer_Peggy WIP (basic functionality, stdlib not converted yet) 2022-09-11 19:22:07 +04:00
Reducer_Type WIP (basic functionality, stdlib not converted yet) 2022-09-11 19:22:07 +04:00
README.md format, rename, simplify 2022-03-29 11:09:59 +02:00
Reducer_Context.res WIP (basic functionality, stdlib not converted yet) 2022-09-11 19:22:07 +04:00
Reducer_ErrorValue.res experimental: replace result with exceptions in reducer 2022-09-07 22:45:19 +04:00
Reducer_Exception.res basic type compiler 2022-07-16 16:13:39 +02:00
Reducer_T.res WIP (basic functionality, stdlib not converted yet) 2022-09-11 19:22:07 +04:00

To interface your library there only 2 files to be modified:

  • Reducer/ReducerInterface/ReducerInterface_ExpressionValue.res

    This is where your additional types are referred for the dispatcher.

  • Reducer/ReducerInterface/ReducerInterface_ExternalLibrary.res

    This is where dispatching to your library is done. If the dispatcher becomes beastly then feel free to divide it into submodules.

The Reducer is built to use different external libraries as well as different external parsers. Both external parsers and external libraries are plugins.

And finally try using Reducer.eval to how your extentions look:

  test("1+2", () => expectEvalToBe( "1+2", "Ok(3)"))