hide implementation details
remove intermediate data representations