В общем, я подумал, и залил новый алгоритм в ветку master (основную ветку).
Он немного медленнее оригинального и не всегда дате такой же результат, но в целом он лучше, так как учитывает ожидаемый тип (тип внешнего выражения) и выдает более понятные сообщения об ошибках.
Если есть возражения, то пишите о них сюда. Будем рассматривать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.