role types
implement duck types