let rec aux_simple = ((i: int)): int => if(i < 100) { aux_simple(i + 1) } else { i }; let counter_simple = ((n: int)): int => aux_simple(n); type sum_aggregator = {counter: int, sum: int }; let counter = ((n: int)): int => { let initial: sum_aggregator = {counter: 0, sum: 0 }; let rec aggregate = ((prev: sum_aggregator)): int => if(prev.counter <= n) { aggregate({ counter: prev.counter + 1, sum: prev.counter + prev.sum }) } else { prev.sum }; aggregate(initial) }; let rec aux_nest = ((prev: sum_aggregator)): sum_aggregator => if(prev.counter < 100) { let sum: int = prev.sum + aux_simple(prev.counter); aux_nest({counter: prev.counter + 1, sum: sum }) } else { ({counter: prev.counter, sum: prev.sum }) }; let counter_nest = ((n: int)): int => { let initial: sum_aggregator = {counter: 0, sum: 0 }; let out: sum_aggregator = aux_nest(initial); out.sum };