Craft3e-0.1.0.2: Chapter20/PerformanceI.hs
-----------------------------------------------------------------------
--
-- Haskell: The Craft of Functional Programming
-- Simon Thompson
-- (c) Addison-Wesley, 1996-2011.
--
-- PerformanceI.hs
--
-----------------------------------------------------------------------
module Main where
main = putStrLn (show (sumI 1 1000000))
-- main = putStrLn (show (sumIA 1 1000000))
-- main = putStrLn (show (sumIS 1 1000000))
sumI :: Integer -> Integer -> Integer
sumI n m
| n>m = 0
| otherwise = n + sumI (n+1) m
sumIA :: Integer -> Integer -> Integer
sumIA n m = accIA n m 0
accIA n m s
| n>m = s
| otherwise = accIA (n+1) m (n+s)
sumIS :: Integer -> Integer -> Integer
sumIS n m = accIS n m 0
accIS n m s
| n>m = s
| otherwise = accIS (n+1) m $! (n+s)