Hello, you can count me as a newbie in functional programming. I'm attempting to define a function that computes the value of x^y for whole numbers. Intuively (all efficiency considerations aside) I would start with something like this: power x y | x == 0 = 0 | y == 0 = 1 | y > 0 = x * power x (y-1) | y < 0 = 1 / fromInteger x * power x (y+1) One recognizes that the function returns either an integer value if y > 0 or a float value if y < 0. Therefore I can't write a signature like pow :: Integer -> Integer -> Integer nor can I do pow :: Integer -> Integer -> Double. If I would use Python I could write something like this: def power(m, n): if m == 0: return 0 if n == 0: return 1 if n > 0: return m * power(m, (n-1)) if n < 0: return (1 / float(m)) * power(m, (n+1)) How then would I write this function in Haskell (concerning types)? Thanks in advance! Kind regards, Toralf