The types should be aware of the 'inheritance' relationships and only allow conversions where appropriate.