Я нахожусь в ситуации, когда я изменяю существующий компилятор, написанный на OCaml. Я добавил местоположения в AST скомпилированного языка, но это вызвало кучу ошибок, потому что проверки на равенство, которые ранее успешно выполнялись, теперь терпят неудачу, когда к идентичным AST присоединено другое местоположение.
В частности, я вижу List.mem
, возвращающих false, когда он должен возвращать true, поскольку он опирается на равенство.
Мне интересно, есть ли способ указать мне, что для любых двух значений моего типа местоположения =
всегда должен возвращать true для любых двух значений этого типа?
Было бы много работы по рефакторингу всего компилятора для повсеместного использования пользовательского равенства, особенно потому, что многие полиморфные функции полагаются на возможность использовать = для любого типа.