hide the implementation of the type being used