Let's move the isCoercibleTo check from the CoerceExpression.create() to the visit method for your CastParseNode in ExpressionCompiler. There are cases where we know we'll be able to coerce, even though it's not always allowed.