Принудительное равенство для действительных чисел в Real в SML
Как объясняется в подписи REAL, реальный тип, определенный в SML, не является типом равенства, и, следовательно, следующее выражение не уменьшает
> 1.0 = 1.0;
poly: : error: Type error in function application.
Function: = : ''a * ''a -> bool
Argument: (1.0, 1.0) : real * real
Reason: Can't unify ''a to real (Requires equality type)
Однако это не удобно, поскольку типы данных и списки, содержащие вещественные значения, также теряют равенство. Мне нужно перегрузить полиморфное равенство =
с Real.==
таким образом, это могло приблизительно рассмотреть также реалы.
Это возможно?
РЕДАКТИРОВАТЬ: отредактированный вопрос, чтобы быть более ясным
2 ответа
Вы читали Почему я не могу сравнить реалы в Standard ML и рассмотреть Real.==
оператор или выполнить эпсилон тест? Рассматривали ли вы тип, подобный Data.Decimal на Haskell (в котором мантисса и показатель степени обрабатываются как пара целых чисел)?