Declaring associated types in protocols