Okay, since I'm sensing this is about to become a type theory conversation, let's start with the function definition:
sue :: Person -> Claim -> Person -> Maybe Money
Now you're basically saying that, given the above definition, we have no choice but to have Company implement the Person typeclass. Unfortunately, there is a lot of code already using the Person typeclass for purposes that are absurd when a Corporation is passed. Consider:
valid_for_carpool :: [Person] -> Boolean
So what to do? One option is to send out emails telling our colleagues to be very careful when using the Person typeclass. The other option is to create a new Suable typeclass, and implement it for both corporations and people.
Which one do you prefer?