@@ -229,49 +229,59 @@ export const evalDiff = (diffExp: DiffExp) => (env: Environment) =>
229229 ) ,
230230 ) ,
231231 Match . tag ( "CallObj" , ( { fn, args } ) =>
232- Effect . succeed (
233- CallExp . make ( {
234- token : { _tag : "fn" , literal : "fn" } ,
235- fn : FuncExp . make ( {
236- token : { _tag : "fn" , literal : "fn" } ,
237- parameters : diffExp . params , // LIMITATION TO A SINGLE VARIABLE FUNCTIONS.
238- body : BlockStmt . make ( {
239- token : { _tag : "!" , literal : "!" } , // FIX eventually
240- statements : [
241- ExpStmt . make ( {
242- token : {
243- _tag : "!" ,
244- literal : "!" ,
245- } ,
246- expression : CallExp . make ( {
247- token : {
248- _tag : "!" ,
249- literal : "!" ,
250- } ,
251- fn : Match . value ( fn ) . pipe (
252- Match . tag ( "BuiltInObj" , ( { fn } ) =>
253- IdentExp . make ( {
254- token : { _tag : "IDENT" , literal : fn } ,
255- value : fn ,
256- } ) ,
257- ) ,
258- Match . tag ( "FunctionObj" , ( { params, body } ) =>
259- FuncExp . make ( {
260- token : fnTokenSchema . make ( { literal : "fn" } ) ,
261- parameters : params ,
262- body,
263- } ) ,
264- ) ,
265- Match . exhaustive ,
266- ) ,
267- args,
268- } ) ,
232+ Effect . all (
233+ args . map ( ( arg ) =>
234+ Schema . decodeUnknown ( PolynomialObj ) ( arg ) . pipe (
235+ Effect . flatMap ( convertToExp ) ,
236+ ) ,
237+ ) ,
238+ ) . pipe (
239+ Effect . flatMap ( ( args ) =>
240+ Effect . succeed (
241+ CallExp . make ( {
242+ token : { _tag : "fn" , literal : "fn" } ,
243+ fn : FuncExp . make ( {
244+ token : { _tag : "fn" , literal : "fn" } ,
245+ parameters : diffExp . params , // LIMITATION TO A SINGLE VARIABLE FUNCTIONS.
246+ body : BlockStmt . make ( {
247+ token : { _tag : "!" , literal : "!" } , // FIX eventually
248+ statements : [
249+ ExpStmt . make ( {
250+ token : {
251+ _tag : "!" ,
252+ literal : "!" ,
253+ } ,
254+ expression : CallExp . make ( {
255+ token : {
256+ _tag : "!" ,
257+ literal : "!" ,
258+ } ,
259+ fn : Match . value ( fn ) . pipe (
260+ Match . tag ( "BuiltInObj" , ( { fn } ) =>
261+ IdentExp . make ( {
262+ token : { _tag : "IDENT" , literal : fn } ,
263+ value : fn ,
264+ } ) ,
265+ ) ,
266+ Match . tag ( "FunctionObj" , ( { params, body } ) =>
267+ FuncExp . make ( {
268+ token : fnTokenSchema . make ( { literal : "fn" } ) ,
269+ parameters : params ,
270+ body,
271+ } ) ,
272+ ) ,
273+ Match . exhaustive ,
274+ ) ,
275+ args,
276+ } ) ,
277+ } ) ,
278+ ] ,
269279 } ) ,
270- ] ,
280+ } ) ,
281+ args,
271282 } ) ,
272- } ) ,
273- args,
274- } ) ,
283+ ) ,
284+ ) ,
275285 ) ,
276286 ) ,
277287 Match . exhaustive ,
0 commit comments