Option.traverse, first pass