Ошибка компилятора F # FS0030, проблемы с ограничением значения

StackOverflow https://stackoverflow.com/questions/416508

Вопрос

Я читал рекламу на StrangeLights Я прочитал отрывок от Expert F # (стр. 119), но я не вижу, как они применяются к моему коду:

В своих тестах я хочу проверить равенство между числами с некоторой терпимостью. Я конвертирую все в единицы измерения, но я хочу быть «универсальным»:

let toleq (e:float<_>) a b = (abs ( a - b ) ) < e

Затем я могу использовать это, чтобы проверить равенство для различных «типов» с плавающей запятой, или сделать карри для создания собственного:

toleqm = toleq 1.0e-10<m>

Но я получаю следующее сообщение:

Type inference has inferred the signature
    val toleq : float<'u> -> float<'u> -> float<'u> -> bool
Either define 'toleq' as a simple data term, make it a function, or add a 
    type constraint to instantiate the type parameters.

Я не вижу, как я могу сделать это, чтобы сделать его функцией - я не вижу никаких неявных параметров.

Что случилось?

Это было полезно?

Решение

Ну, я немного бездельничал и в отчаянии нашел решение, но не уверен, что понимаю, почему ...

let toleq (e:float<_>) (a:float<_>) (b:float<_>) = (abs ( a - b ) ) < e

Тьфу, это почти так же безобразно, как общие объявления в C #.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top