Looking at the existing usage for isCoercibleTo, I think it's impossible to replace all usage of it to a check that throws Exception. I'm thinking about making a check method that would throws exception on various erroneous situation but does not return a value, and changing the existing isCoercibleTo to call that method, and returns fall if any exception is caught. We will switch calls like in UpsertCompiler to use the one throwing more fine grain exceptions.

The bottom line is, coercision failure can happen in various situation due to different reason. We need a more fine-grain way to indicate different exception situation than just returning true or false.