{rhs-of 'mean ; lam-body { arg 2 ; let-intro 's } { arg 3 ; let-intro 'l } innermost let-float try (reorder-lets ['s,'l]) let-tuple 'sl { case-expr ; abstract 'xs ; app-fun ; let-intro 'sumlength } } innermost let-float binding-group-of 'sumlength nonrec-to-rec -- since we intend sumlength to be a recursive function binding-of 'sumlength remember sumlen { [def-rhs, lam-body] case-split-inline 'xs any-call (unfold 'sum) any-call (unfold 'length) simplify case-alt 1 alpha-alt ['y,'ys] alt-rhs { arg 3 ; arg 3 ; let-intro 'l } { arg 2 ; arg 3 ; let-intro 's } innermost let-float try (reorder-lets ['s,'l]) let-tuple 'sl { case-expr ; fold-remembered sumlen } }