No esperaba el siguiente código para trabajar:¿Por qué Haskell parece tener por defecto la lectura de Int al leer Num?
foo :: (Num a) => a -> a
foo x = x + x
main = do
print (foo (read "7"))
porque no es posible deducir totalmente el tipo de (léase "7") basado en el código. Pero GHC (6.12.3) piensa lo contrario e imprime 14.
Si "7" se cambia a "7.2", el código falla con "sin analizar". ¿Que está pasando aqui? ¿Cómo está Haskell decidiendo qué instancia de Read usar?
'(Num a, leer un) => [Char] -> a' es claramente ambiguo. Tiene que decidir de alguna manera, así que supongo que 'Int' es el predeterminado para' Num'. Tal vez porque es la primera instancia de la clase de tipo de alguna manera? Voy a ir a la búsqueda manual. Es una pregunta interesante. – alternative
Solo para el registro: su valor predeterminado es 'Integer', no' Int'. – sepp2k