@@ -25,6 +25,7 @@ import {
2525 expectIdentEquivalence ,
2626} from "../../schemas/nodes/exps/ident" ;
2727import { TokenType } from "../../schemas/token-types/union" ;
28+ import { objInspect } from "../object" ;
2829import { makeLambda } from "./helper" ;
2930
3031const baseBuiltInDiffFunc = ( x : IdentExp ) =>
@@ -70,12 +71,15 @@ const baseBuiltInDiffFunc = (x: IdentExp) =>
7071 x ,
7172 ) ;
7273
73- yield * Effect . log ( "chain" , chain ) ;
74+ yield * Effect . log ( "chain" , objInspect ( chain ) ) ;
7475
7576 return chain ;
7677 } ) . pipe (
7778 Effect . tap ( ( x ) =>
78- Effect . annotateCurrentSpan ( "chain" , x ) ,
79+ Effect . annotateCurrentSpan (
80+ "chain" ,
81+ objInspect ( x ) ,
82+ ) ,
7983 ) ,
8084 ) ,
8185 ) ,
@@ -226,58 +230,61 @@ const processTerm = Effect.fn("diff.process-term")(
226230
227231// powerRule(ONE, ONE, x)
228232
229- export const diffPolynomial = (
230- obj : PolynomialObj ,
231- x : IdentExp ,
232- ) : Effect . Effect < PolynomialObj , ParseError | KennethParseError , never > =>
233- Match . value ( obj ) . pipe (
234- Match . tag ( "IntegerObj" , ( ) => constantRule ( ) ) , // leaf
235- Match . tag ( "CallObj" , baseBuiltInDiffFunc ( x ) ) ,
236- Match . tag ( "IdentObj" , ( ) => powerRule ( ONE , ONE , x ) ) , // leaf
237- Match . tag ( "InfixObj" , ( { left, operator, right } ) =>
238- Effect . all ( [
239- Schema . decodeUnknown ( PolynomialObj ) ( left ) ,
240- Schema . decodeUnknown (
241- Schema . Literal (
242- TokenType . MINUS ,
243- TokenType . PLUS ,
244- TokenType . ASTERISK ,
245- TokenType . SLASH ,
246- TokenType . EXPONENT ,
247- ) ,
248- ) ( operator ) ,
249- Schema . decodeUnknown ( PolynomialObj ) ( right ) ,
250- ] ) . pipe (
251- Effect . flatMap ( ( [ left , operator , right ] ) =>
252- Match . value ( operator ) . pipe (
253- Match . when ( TokenType . ASTERISK , ( ) => productRule ( left , right , x ) ) ,
254- Match . when ( TokenType . SLASH , ( ) => quotientRule ( left , right , x ) ) ,
255- Match . when ( TokenType . EXPONENT , ( operator ) =>
256- Match . value ( left ) . pipe (
257- Match . tag ( "InfixObj" , ( ) =>
258- chainRule (
259- InfixObj . make ( {
260- left : IdentObj . make ( { identExp : x } ) ,
261- operator,
262- right,
263- } ) ,
264- left ,
265- x ,
233+ export const diffPolynomial = Effect . fn ( "diff.outer" ) (
234+ (
235+ obj : PolynomialObj ,
236+ x : IdentExp ,
237+ ) : Effect . Effect < PolynomialObj , ParseError | KennethParseError , never > =>
238+ Match . value ( obj ) . pipe (
239+ Match . tag ( "IntegerObj" , ( ) => constantRule ( ) ) , // leaf
240+ Match . tag ( "CallObj" , baseBuiltInDiffFunc ( x ) ) ,
241+ Match . tag ( "IdentObj" , ( ) => powerRule ( ONE , ONE , x ) ) , // leaf
242+ Match . tag ( "InfixObj" , ( { left, operator, right } ) =>
243+ Effect . all ( [
244+ Schema . decodeUnknown ( PolynomialObj ) ( left ) ,
245+ Schema . decodeUnknown (
246+ Schema . Literal (
247+ TokenType . MINUS ,
248+ TokenType . PLUS ,
249+ TokenType . ASTERISK ,
250+ TokenType . SLASH ,
251+ TokenType . EXPONENT ,
252+ ) ,
253+ ) ( operator ) ,
254+ Schema . decodeUnknown ( PolynomialObj ) ( right ) ,
255+ ] ) . pipe (
256+ Effect . flatMap ( ( [ left , operator , right ] ) =>
257+ Match . value ( operator ) . pipe (
258+ Match . when ( TokenType . ASTERISK , ( ) => productRule ( left , right , x ) ) ,
259+ Match . when ( TokenType . SLASH , ( ) => quotientRule ( left , right , x ) ) ,
260+ Match . when ( TokenType . EXPONENT , ( operator ) =>
261+ Match . value ( left ) . pipe (
262+ Match . tag ( "InfixObj" , ( ) =>
263+ chainRule (
264+ InfixObj . make ( {
265+ left : IdentObj . make ( { identExp : x } ) ,
266+ operator,
267+ right,
268+ } ) ,
269+ left ,
270+ x ,
271+ ) ,
266272 ) ,
273+ Match . orElse ( ( ) => processTerm ( obj , x ) ) ,
267274 ) ,
268- Match . orElse ( ( ) => processTerm ( obj , x ) ) ,
269275 ) ,
276+ Match . when ( TokenType . PLUS , ( plus ) =>
277+ sumAndDifferenceRule ( left , right , x , plus ) ,
278+ ) ,
279+ Match . when ( TokenType . MINUS , ( minus ) =>
280+ sumAndDifferenceRule ( left , right , x , minus ) ,
281+ ) ,
282+ Match . exhaustive ,
270283 ) ,
271- Match . when ( TokenType . PLUS , ( plus ) =>
272- sumAndDifferenceRule ( left , right , x , plus ) ,
273- ) ,
274- Match . when ( TokenType . MINUS , ( minus ) =>
275- sumAndDifferenceRule ( left , right , x , minus ) ,
276- ) ,
277- Match . exhaustive ,
278284 ) ,
279285 ) ,
280286 ) ,
287+ Match . exhaustive ,
288+ Effect . tap ( ( x ) => Effect . log ( "outer obj" , objInspect ( obj ) ) ) ,
281289 ) ,
282- Match . exhaustive ,
283- ) ;
290+ ) ;
0 commit comments