Type Geheimnisse. Warum kompiliert dieser Code?
Dieser Code wird nicht kompiliert:
default ()
f :: RealFloat a => a
f = 1.0
g :: RealFloat a => a
g = 1.0
h :: Bool
h = f < g --Error. Ambiguous.
Dies wird erwartet, weil es nicht eindeutig ist. Die beiden Möglichkeiten sindFloat
undDouble
und der Compiler weiß nicht, welches<
nehmen
Allerdings ist dieser Code does compile:
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?
Warum? Warum ist Haskell hier nicht verwirrt, ähnlich wie im obigen Beispiel, über welches+
zum auswählen (fürFloat
oderDouble
)?