let fold (func: 'acc -> 'data -> 'acc) (acc: 'acc) (stack: 'data stack) : 'acc = let rec fold' acc' i = if i >= stack.size then acc' else fold' (func acc' stack.stack.(i)) (i + 1) in fold' acc 0