I was trying to write below program for ackerman function but it fails (waits too long) for ack(4,1) whereas a recursive C program gives result in 37secs.Can someone pls explain this behaviour and recomend some optimisation.

------haskell code
f m n  | m==0 =n+1
           | n==0 = f  (m-1) 1
           | otherwise = f (m-1) (f m (n-1))

Thanks
Abhishek Kumar