In a statically typed language, users can abstract data and produce constructors using algebraic data types, or they can deal with data abstraction using class, trait, and mixin. Users can access a class system in dynamically typed languages such as Python and Ruby. But how can scheme, the simplest functional language and the closest to -calculi, abstract data? Is it common for scheme programmers to just put data in a list or a lambda abstraction and then build some accessor function to make it appear like a tree or anything else? as stated by EOPL: data specification through interfaces Then, what is the relationship between this abstraction approach and abstract data types (ADT) and objects?