Тип загадок. Почему этот код компилируется?
Этот код не компилируется:
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
)?