Escribe misterios. ¿Por qué se compila este código?

Este código no compila:

default ()

f :: RealFloat a => a
f = 1.0

g :: RealFloat a => a
g = 1.0

h :: Bool
h = f < g --Error. Ambiguous.

Esto se espera porque es ambiguo. Las dos posibilidades sonFloat yDouble y el compilador no sabe qué< para recoger.

Sin embargo, este códigohace compilar:

default ()

f :: RealFloat a => a
f = 1.0

g :: RealFloat a => a
g = 1.0

h :: RealFloat a => a
h = f + g --Why does this compile?

¿Por qué? ¿Por qué no se confunde Haskell aquí, de manera similar al ejemplo anterior, acerca de cuál+ elegir (paraFloat oDouble)?

Respuestas a la pregunta(3)

Su respuesta a la pregunta