In Control.Arrow we have:

leftApp :: ArrowApply a => a b c -> a (Either b d) (Either c d)

Any instance of ArrowApply can be made into an instance of ArrowChoice by defining left = leftApp.

So why isn't ArrowChoice a parent of ArrowApply?

Best regards,
Petr