Тип загадок. Почему этот код компилируется?

Этот код не компилируется:

default ()

f :: RealFloat a => a
f = 1.0

g :: RealFloat a => a
g = 1.0

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

Это ожидается, потому что это неоднозначно. Две возможностиFloat а такжеDouble и компилятор не знает, какой< подобрать.

Тем не менее, этот кодделает компиляции:

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?

Зачем? Почему Хаскелл не смущен здесь, так же, как в примере выше, о котором+ выбрать (дляFloat или жеDouble)?

Ответы на вопрос(3)

Ваш ответ на вопрос