-- Comp1100 S1 2006
-- Understanding Recursion
-- Clem Baker-Finch March 2006

module Sum where
import Prelude hiding (sum)

-- A straightforward inductive definition

sum :: Num a => [a] -> a
sum []      = 0
sum (x:xs)  = x + sum xs

-- Alternative accumulator definition

sum' :: Num a => [a] -> a
sum' xs = addUp xs 0

addUp :: Num a => [a] -> a -> a
addUp []     total  = total
addUp (x:xs) total  = addUp xs (total+x)

