Reputation: 183
I just tried to write a simple function to calculate the average of the input-Ints:
avg :: Int -> Int -> Int -> Float
avg x y z = (x+y+z)/3
When I exchange the signature to
avg :: Float -> Float -> Float -> Float
it works fine, but with the one above I get the following error message:
Couldn't match expected type 'Float' with actual type 'Int'.
Which possibilites do I have to use the first signature, which accepts Ints (only)?
Upvotes: 6
Views: 4272
Reputation: 54584
Shorter:
avg :: Int -> Int -> Int -> Float
avg x y z = (fromIntegral $ sum [x,y,z]) / 3.0
Or you generalize this for a list of Int
s:
avg :: [Int] -> Float
avg xs = (fromIntegral $ sum xs) / (fromIntegral $ length xs)
Upvotes: 2
Reputation: 47052
Use fromIntegral
to convert the Int
s to Float
s:
avg :: Int -> Int -> Int -> Float
avg x y z = (fromIntegral x + fromIntegral y + fromIntegral z) / 3
Upvotes: 13