
Mujtaba Boori wrote:
Define a higher order function that tests whether two functions , both defined on integers , coincide for all integers between 1 and 100
If this really is a homework question, I dare you to submit this solution. Try it for yourself, it works fine. :-) module Main where import Control.Monad import Data.IORef import System.IO.Unsafe forLoop :: Int -> Int -> (Int -> IO ()) -> IO () forLoop start stop body = mapM_ body [start..stop] test :: (Eq a) => (Int -> a) -> (Int -> a) -> Bool test f1 f2 = unsafePerformIO $ do goodSoFar <- newIORef True forLoop 1 100 $ \i -> when (f1 i /= f2 i) $ writeIORef goodSoFar False readIORef goodSoFar testFunc1 27 = "numpty" testFunc1 i = show i testFunc2 270 = "numpty" testFunc2 i = show i main = do print $ test show testFunc1 print $ test show testFunc2