# 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