Considerate questo esempio:Haskell: Inadempiente vincoli per digitare
applyKTimes :: Integral i => i -> (a -> a) -> a -> a
applyKTimes 0 _ x = x
applyKTimes k f x = applyKTimes (k-1) f (f x)
applyThrice :: (a -> a) -> a -> a
applyThrice = applyKTimes 3
Il 3
in applyThrice
è in default da GHC a un Integer
come mostrato durante la compilazione con -Wall
:
Warning: Defaulting the following constraint(s) to type 'Integer'
'Integral t'
arising from a use of 'applyKTimes'
quindi credo che Integer
è il valore predefinito Integral a => a
.
- C'è un modo per definire "tipi predefiniti" anche per altri vincoli?
- L'utilizzo dei tipi predefiniti è una cattiva pratica? (Che si lamenta quando si utilizza
-Wall
..)