When you've got a type problem like this, the best thing I've found is to be explicit about my type signatures. First, just check your isFactor method, it's incorrect.
isFactor x y = if x `mod` y then True else False
the mod function's type is
(Integral a) => a -> a -> a, which means it takes two integrals and returns an integral. Simply put, you can't use this as a conditional! This is not C.
isFactor x y = if x `mod` y != 0 then True else False
That would at least build correctly. The best thing I've found when you've got type issues like this is to be specific about the type signatures of the methods. That's a good way to help the compiler find the right problem for you, since it assumes you know what happened up until there's a conflict, then it only highlights that particular issue. :)