Digite mistérios. Por que esse código é compilado?

Este código não compila:

default ()

f :: RealFloat a => a
f = 1.0

g :: RealFloat a => a
g = 1.0

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

Isso é esperado porque é ambíguo. As duas possibilidades sãoFloat eDouble e o compilador não sabe qual< escolher.

No entanto, esse códigofaz 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 que Haskell não está confuso aqui, de maneira semelhante ao exemplo acima, sobre o qual+ escolher (porFloat ouDouble)?

questionAnswers(3)

yourAnswerToTheQuestion