[Haskell-cafe] Mixed-type arithmetic, or type coercion
Albert Y. C. Lai
trebla at vex.net
Tue Mar 13 17:12:02 EDT 2007
Dave Hinton wrote:
> Arithmetic operators in haskell appear to require their operands to
> have the same type. How can I do arithmetic between operands of
> different types?
> Alternatively, how do I coerce a value from being an Int to being a Double?
fromIntegral can do this coercion. It is more general: the input can be
Int or Integer; the output can be any numeric type.
There is also realToFrac: the input can be Int, Integer, Float, Double,
or Ratio a (eg Rational); the output can be Float, Double, Ratio a (eg
Rational), or Complex a.
(Someone please compare their costs wherever comparable. I have a
feeling that most compilers make fromIntegral faster than realToFrac
for, say, Int -> Double.)
When you have time, you may like to find out more about "type classes".
In short, it is the way Haskell provides operator overloading. Numeric
types use this scheme to achieve the above generality. If you know type
classes, you have access to the full story.
More information about the Haskell-Cafe