eq ( x [ i ], y [ i ] ) ) { return false ; } } return true ; } else if ( x. tag === y. tag ) { if ( x. args && y. args ) { return eq ( x. args, y. args ) ; } else if ( x. arg && y. arg ) { return eq ( x. arg, y. arg ) ; } else if (!
) { return { tag : "Ann", args : [ m, a ] } ; } function Pair ( m, n ) { return { tag : "Pair", args : [ m, n ] } ; } function Fst ( m ) { return { tag : "Fst", arg : m } ; } function Snd ( m ) { return { tag : "Snd", arg : m } ; } function Lam ( x, m ) { return { tag : "Lam", args : [ x, m ] } ; } function App ( m, n ) { return { tag : "App", args : [ m, n ] } ; } The last change that we'll make will be to change the notion of synthesis a little bit from what we had before.