To make sure the type conversion object is a category, we have to make sure the type conversion arrow is transitive. For example, if we have a pydantic.BaseModel → str arrow and a str → bytes arrow, then the system should trivially support pydantic.BaseModel → bytes cast, without us explicitly writing it out. Implementation is based on function composition.