This document discusses representing data types and programming in an abstract way that hides the concrete representation of data. It presents an approach where programs operate on abstract representations of data rather than concrete implementations, allowing computations to be performed without inspecting the output. As an example, it shows an abstract implementation of list concatenation that computes correctly without knowing the concrete list representation. This approach ensures correctness while preventing inspection of results.