basic abstract type example