ho deliberatamente aggiunto x alla fine di questa funzionePerché questi argomenti hanno dedotto un tipo di unità?
let myMax x y =
if x > y then x else y
x
mi aspettavo che X e Y argomenti sono ancora di 'un tipo, ma ho questa firma invece:
myMax : x:unit -> y:unit -> unit
Perché questi argomenti dedotti per avere un tipo di unità?
Modifica: Grazie a @gilles per la risposta. Considera queste due funzioni:
let foo x y =
0 // warning
x
val foo : x:'a -> y:'b -> 'a
let foo2 x y =
if x > y then x else y // no warning
x
val foo2 : x:unit -> y:unit -> unit
Che cosa differenzia le due firme? Sembra come nella seconda funzione il compilatore interpretare il risultato del confronto x -sia o Y come unità
Vorrei anche aggiungere che se vi trovate usando 'ignore', le probabilità sono, si sta facendo qualcosa di sbagliato . Anche questo particolare esempio non è un'eccezione: l'espressione 'if-then' non ha alcun senso, perché il suo valore restituito viene gettato via e non produce effetti collaterali. –