Я пытаюсь написать функцию для проверки на равенство типов, игнорируя переменные экземпляра (не уверен, что это правильная терминология для SML). Предпочтительно эта функция может работать с несколькими типами данных.
Итак, если у меня есть:
тип данных D = A | B int;
myEqual A A
, myEqual (B 1) (B 1)
и myEqual (B 1) (B 2)
все вернут истину, а myEqual A (B 1)
вернет ложь.
Моей первой мыслью было реализовать его как-то вроде fun myEqual a b = a = b;
. Тем не менее, это сравнивает переменные экземпляра обеих переменных, а это не то, что мне нужно, поэтому myEqual (B 1) (B 2)
вернет false.
Я знаю, что это может быть реализовано в этом случае с использованием сопоставления с шаблоном, как
fun myEqual (B _) (B _) = true
| myEqual A A = true
| myEqual _ _ = false;
Но это работает только для этого конкретного типа данных.
Есть ли в SML какие-либо операции для проверки только на равенство типов, но не на переменные экземпляра?