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