abstract type