exercise 4.19
Ketil Malde
ketil@ii.uib.no
09 Oct 2001 13:51:08 +0200
"riz er" <rizer_@hotmail.com> writes:
> howMany :: Int -> Int -> Int -> Int
> howMany n1 n2 n3
> | (n1 > a) && (n2 > a) && (n3 > a) = 3
> | (n1 > a) && (n2 > a) = 2
> | (n1 > a) && (n3 > a) = 2
> | otherwise = 1
> where a = (n1 + n2 + n3)/3
> i get an error message
> "Instance of Fractional Int required for definition of howMany"
The problem is that since Haskell knows that n1 et al is an Int, it
deduces that a must be an Int (since (>) compares values of the same
type). Unfortunately, you're dividing with (/), which provides
fractional answers, and not necessarily integers, and certainly not
Ints.
The easy way out is to consider a different division operator, but you
may want to consider the behaviour of your program in the obvious
borderline case.
-kzm
--
If I haven't seen further, it is by standing in the footprints of giants