letterali numerici hanno un tipo polimorfico:Perché i valori polimorfici non vengono dedotti in Haskell?
*Main> :t 3
3 :: (Num t) => t
Ma se mi legano una variabile a tale letterale, il polimorfismo si perde:
x = 3
...
*Main> :t x
x :: Integer
Se io definisco una funzione, d'altra parte, è naturalmente polimorfa:
f x = 3
...
*Main> :t f
f :: (Num t1) => t -> t1
potrei fornire una firma tipo per garantire la x
rimane polimorfa:
x :: Num a => a
x = 3
...
*Main> :t x
x :: (Num a) => a
Ma perché è necessario? Perché il tipo polimorfico non è desunto?
Farebbe qualche differenza? (Davvero non lo so, anche se non sospetto) – delnan
Fa la differenza; Voglio che il tipo rimanga il più generale possibile. –
Vieni di nuovo? Non importa se 'x' è' Integer' o 'Num a => a', puoi passarlo a qualsiasi funzione che si aspetta un' Num'. Le funzioni devono essere generiche, i valori no. – delnan