> "Mike T. Machenry" <[EMAIL PROTECTED]> writes: > > I recently desided I wanted a bunch function to return > > float instead of Int. [...] I found fromInteger but it > > didn't seem to work on the return value of the cardinality > > function for instance. > > Try fromIntegral, which works for Int and Integer, too.
Casting an Integral value to a Fractional value to perform arithmetic operations, is a very common need and I don't like adding fromIntegral everywhere, so ended up writing a (very simple) module with generalized arithmetic operators (see attachment). The » next to the operations indicate a cast from an Integral to a Fractional value. J.A.
module CrossTypeOps where -- Addition (+«) :: (Fractional a, Integral b)=> a -> b -> a (+«) x n = x+fromIntegral n (»+) :: (Integral a, Fractional b)=> a -> b -> b (»+) n x = fromIntegral n + x (»+«) :: (Integral a, Fractional b)=> a -> a -> b (»+«) m n = fromIntegral m+fromIntegral n -- Difference (-«) :: (Fractional a, Integral b)=> a -> b -> a (-«) x n = x-fromIntegral n (»-) :: (Integral a, Fractional b)=> a -> b -> b (»-) n x = fromIntegral n - x (»-«) :: (Integral a, Fractional b)=> a -> a -> b (»-«) m n = fromIntegral m-fromIntegral n -- Multiplication (*«) :: (Fractional a, Integral b)=> a -> b -> a (*«) x n = x*fromIntegral n (»*) :: (Integral a, Fractional b)=> a -> b -> b (»*) n x = fromIntegral n * x (»*«) :: (Integral a, Fractional b)=> a -> a -> b (»*«) m n = fromIntegral m*fromIntegral n -- Division (/«) :: (Fractional a, Integral b)=> a -> b -> a (/«) x n = x / fromIntegral n (»/) :: (Integral a, Fractional b)=> a -> b -> b (»/) n x = fromIntegral n / x (»/«) :: (Integral a, Fractional b)=> a -> a -> b (»/«) m n = fromIntegral m / fromIntegral n -- Priorities infixl 6 +«, »+, »+«, -«, »-, »-« infixl 7 *«, »*, »*«, /«, »/, »/«