Abstraction using types