Model as extensible abstraction with datatypes