Reducer_Expression.resi

This commit is contained in:
Umur Ozkul 2022-03-30 11:45:30 +02:00
parent 158381dfbb
commit 12113cad7e
3 changed files with 39 additions and 3 deletions

View File

@ -5,6 +5,8 @@ type errorValue =
| RERecordPropertyNotFound(string, string)
| RETodo(string) // To do
type t = errorValue
let showError = err =>
switch err {
| REArrayIndexNotFound(msg, index) => `${msg}: ${Js.String.make(index)}`

View File

@ -8,6 +8,7 @@ open Reducer_ErrorValue
type expression = T.expression
type expressionValue = ExpressionValue.expressionValue
type t = expression
/*
Shows the Lisp Code as text lisp code
@ -31,10 +32,10 @@ let showResult = codeResult =>
/*
Converts a MathJs code to Lisp Code
*/
let parse_ = (expr: string, parser, converter): result<expression, errorValue> =>
let parse_ = (expr: string, parser, converter): result<t, errorValue> =>
expr->parser->Result.flatMap(node => converter(node))
let parse = (mathJsCode: string): result<expression, errorValue> =>
let parse = (mathJsCode: string): result<t, errorValue> =>
mathJsCode->parse_(MathJs.Parse.parse, MathJs.ToExpression.fromNode)
module MapString = Belt.Map.String
@ -54,7 +55,7 @@ let reduceValueList = (valueList: list<expressionValue>): result<expressionValue
/*
Recursively evaluate/reduce the code tree
*/
let rec reduceExpression = (expression: expression, bindings): result<expressionValue, 'e> =>
let rec reduceExpression = (expression: t, bindings): result<expressionValue, 'e> =>
switch expression {
| T.EValue(value) => value->Ok
| T.EList(list) => {

View File

@ -0,0 +1,33 @@
module Result = Belt.Result
module T = Reducer_Expression_T
type expression = T.expression
type expressionValue = ReducerInterface.ExpressionValue.expressionValue
type t = expression
let show: T.expression => Js.String.t
let showResult: result<T.expression, 'a> => string
let parse_: (
string,
string => Result.t<'a, Reducer_ErrorValue.t>,
'a => Result.t<expression, Reducer_ErrorValue.t>,
) => result<expression, Reducer_ErrorValue.t>
let parse: string => result<expression, Reducer_ErrorValue.t>
module MapString = Belt.Map.String
type bindings = MapString.t<unit>
let defaultBindings: bindings
let reduceValueList: list<expressionValue> => result<
expressionValue,
Reducer_ErrorValue.t,
>
let reduceExpression: (expression, 'a) => result<
expressionValue,
Reducer_ErrorValue.t,
>
let evalWBindingsExpression: (expression, 'a) => result<
expressionValue,
Reducer_ErrorValue.t,
>
let evalWBindings: (string, bindings) => Result.t<
expressionValue,
Reducer_ErrorValue.t,
>
let eval: string => Result.t<expressionValue, Reducer_ErrorValue.t>