type RealFunction a = (a -> Double)
+
+-- | A 'Show' instance is required to be a 'Num' instance.
instance Show (RealFunction a) where
- show _ = "Real Function"
+ -- | There is nothing of value that we can display about a
+ -- function, so simply print its type.
+ show _ = "RealFunction"
+
+-- | An 'Eq' instance is required to be a 'Num' instance.
instance Eq (RealFunction a) where
+ -- | Nothing else makes sense here; always return 'False'.
_ == _ = False
+
+-- | The 'Num' instance for RealFunction allows us to perform
+-- arithmetic on functions in the usual way.
instance Num (RealFunction a) where
(f1 + f2) x = (f1 x) + (f2 x)
(f1 - f2) x = (f1 x) - (f2 x)
fromInteger i _ = fromInteger i
--- Takes a constant, and a function as arguments. Returns a new
--- function representing the original function times the constant.
+-- | Takes a constant, and a function as arguments. Returns a new
+-- function representing the original function times the constant.
cmult :: Double -> (RealFunction a) -> (RealFunction a)
cmult coeff f = (*coeff) . f
--- Takes a function f and an exponent n. Returns a new function, f^n.
+
+-- | Takes a function f and an exponent n. Returns a new function,
+-- f^n.
fexp :: (RealFunction a) -> Int -> (RealFunction a)
fexp f n
| n == 0 = (\_ -> 1)