This might seems dumb, but given your interface this would fit:
type accumulator = Obj.t list
let accumulator : accumulator = []
let apply l v = Obj.repr v :: l
let data l = Array.of_list l
What more do you need to require accumulator to be a function ?