Этот код не компилируется:
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)?