Ho il seguente codice Haskell:problemi con i tipi di numero di Haskell
fac n = product [1..n]
taylor3s w0 f f' f'' t h = w1 : taylor3s w1 f f' f'' (t+h) h
where hp i = h^i/fac i
w1 = w0 + (hp 1) * f t w0 + (hp 2) * f' t w0 + (hp 3) * f'' t w0
taylor_results = take 4 $ taylor3s 1 f f' f'' 1 0.25
where f t x = t^4 - 4*x/t
f' t x = 4*t^3 - 4*(f t x)/t + 4*x/t^2
f'' t x = 12*t^2 - 4*(f' t x)/t + 8*(f t x)/t^2 - 8*x/t^3
taylor_results si suppone che sia un caso d'uso di taylor3s. Tuttavia, c'è qualcosa di sbagliato nel tipo di inferenza del numero. Quando provo a compilare, questo è l'errore che ottengo:
practice.hs:93:26:
Ambiguous type variable `a' in the constraints:
`Integral a'
arising from a use of `taylor3s' at practice.hs:93:26-51
`Fractional a' arising from a use of `f' at practice.hs:93:37
Possible cause: the monomorphism restriction applied to the following:
taylor_results :: [a] (bound at practice.hs:93:0)
Probable fix: give these definition(s) an explicit type signature
or use -XNoMonomorphismRestriction
Qualcuno mi può aiutare con la comprensione qual è il problema?
Fornisco sempre tipi espliciti per le funzioni di primo livello. Rende il codice più facile da leggere e, quando succede qualcosa del genere, aiuta a restringere il problema e aiuta il compilatore a dare messaggi di errore significativi.Senza che tutto ciò che sai è che c'è un errore di tipo lì da qualche parte. –
sì, di solito lo farei anch'io, ma sono abbastanza all'oscuro sui tipi numerici. Chi sapeva che potevano esserci così tanti tipi diversi di numeri? – mindeavor