1open Wonka_types; 2 3let scan = (f, seed) => curry(source => curry(sink => { 4 let acc = ref(seed); 5 6 source((.signal) => sink(. 7 switch (signal) { 8 | Push(x) => { 9 acc := f(.acc^, x); 10 Push(acc^) 11 } 12 | Start(x) => Start(x) 13 | End => End 14 } 15 )); 16}));