open number _ ^ 0 = 1 x ^ n | n > 0 = f x (n - 1) x |else = fail "Negative exponent" where f _ 0 y = y f a d y = g a d where g b i | even i = g (b * b) (i `quot` 2) | else = f b (i - 1) (b * y) (12 ^ 4, 12 ** 4)