28 lines
780 B
Text
28 lines
780 B
Text
open number
|
|
|
|
//A class that defines our overloadable function
|
|
class Exponent a where
|
|
(^) a->a->_
|
|
|
|
//Implementation for integers
|
|
instance Exponent Int where
|
|
_ ^ 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)
|
|
|
|
//Implementation for floats
|
|
instance Exponent Single where
|
|
x ^ n | n < 0.001 = 1
|
|
| n > 0 = f x (n - 1) x
|
|
| else = fail "Negative exponent"
|
|
where f a d y
|
|
| d < 0.001 = y
|
|
| else = g a d
|
|
where g b i | even i = g (b * b) (i / 2)
|
|
| else = f b (i - 1) (b * y)
|
|
|
|
(12 ^ 4, 12.34 ^ 4.04)
|