Pregunta

He leído el anuncio en StrangeLights , He leído el pasaje de Expert F # (página 119), pero no puedo ver cómo se aplican a mi código:

Para mis pruebas, quiero verificar la igualdad entre flotadores, con un poco de tolerancia. Estoy convirtiendo todo a unidades de medida, pero quiero poder ser 'genérico':

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

Luego puedo usar esto para verificar la igualdad en diferentes 'tipos' de flotadores, o hacer curry para hacer uno personalizado:

toleqm = toleq 1.0e-10<m>

Pero recibo el siguiente mensaje:

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.

No veo cómo puedo hacer más para que sea una función, no puedo ver ningún parámetro implícito.

¿Qué pasa?

¿Fue útil?

Solución

Bueno, perdí un poco el tiempo y encontré la solución, desesperado, pero no estoy seguro de entender por qué ...

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

Ugh, es casi tan feo como las declaraciones genéricas en C #.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top