# Ex 9.9 in Paul Hudak's book

**Ludovic Kuty
**
kuty@advalvas.be

*Mon, 01 Apr 2002 00:10:02 +0200*

At 16:23 31/03/2002 -0500, Antony Courtney wrote:
>*Ludovic Kuty wrote:
*>>*The exercise is short.
*>>*First, he defines a "fix" function:
*>>* fix f = f (fix f)
*>>*Which has the type (a -> a) -> a
*>>*Then the function "remainder":
*>>* remainder :: Integer -> Integer -> Integer
*>>* remainder a b = if a < b then a else remainder (a - b) b
*>>*The function fix, has far as i understand the matter, has no base case.
*>>*So if someone wants to evaluate it, it will indefinitely apply the function f
*>>*to itself, leading the hugs interpreter to its end.
*>*
*>*...
*>*Now let's define a generator to test out y:
*>*
*>>* factGen = \f -> \n -> if n==0 then 1 else n * f (n-1)
*>>* fact = y factGen
*
Thanks for the combinator.
That's really obscure :)
But it works:
remainder2 :: Integer -> Integer -> Integer
remainder2 = fix remainderGen
where remainderGen f a b = if a < b then a
else f (a - b) b