Pergunta

Eu li a sinopse em StrangeLights , eu li o passagem de Especialista F # (página 119), mas eu não posso ver como eles se aplicam ao meu código:

Para meus testes, eu quero verificar igualdade entre carros alegóricos, com um pouco de tolerância. Eu estou convertendo tudo para unidades de medida, mas eu quero ser capaz de ser 'genérico':

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

Posso, então, usar isso para verificar a igualdade em diferentes 'tipos' de float, ou curry-lo para fazer um personalizado:

toleqm = toleq 1.0e-10<m>

Mas eu recebo a seguinte mensagem:

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.

Não vejo como posso fazer mais nada para torná-lo uma função - eu não consigo ver quaisquer parâmetros implícitos.

O que foi?

Foi útil?

Solução

Bem, eu brinquei um pouco e encontrou a solução, em desespero, mas eu não tenho certeza que eu entendo por que ...

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

Ugh, é quase tão feio como declarações genéricas em C #.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top