Se faccio let f1 x = x; x+1
, compilatore si lamenta: Warning 10: this expression should have type unit.
Perché il compilatore smette di lamentarsi di "tipo unità" in questo caso?
Se lo faccio let f2 f = f(); 5
, compilatore darà val f2 : (unit -> 'a) -> int = <fun>
.
Domande
- Il sistema di tipo ne deduce che
f
è una funzione che prendeunit
come parametro e restituisce'a
. Ma se restituisce'a
, perché il compilatore non fornisceWarning 10
? - Se il compilatore non fornisce
Warning 10
, significa che pensaf()
restituisceunit
, non è vero? Allora perché dà'a
come tipo di ritorno?
'se il compilatore dà f2 tipo (unit -> 'a) -> int, significa che pensa f2 restituisce' a' perché? 'f2' sicuramente è considerato per restituire' int', non è vero? –
@JacksonTale Quello era un errore di battitura, intendevo "... che' f' return ''a'" –
ahh, ok, che può spiegare –