factorial :: Integer -> Integer factorial 0 = 1 factorial n = n * factorial (n - 1) factorial n = if n > 0 then n * factorial (n-1) else 1 factorial n = product [1..n] factorial n = foldl (*) 1 [1..n] factorial = foldr (*) 1 . enumFromTo 1