-- | The Misc module contains helper functions that seem out of place -- anywhere else. module Misc where -- | The standard factorial function. See -- for -- possible improvements. -- -- Examples: -- -- >>> factorial 0 -- 1 -- -- >>> factorial 4 -- 24 -- factorial :: Int -> Int factorial n | n <= 1 = 1 | n > 20 = error "integer overflow in factorial function" | otherwise = product [1..n] -- | Takes a three-dimensional list, and flattens it into a -- one-dimensional one. flatten :: [[[a]]] -> [a] flatten xs = concat $ concat xs -- | Takes a list, and returns True if its elements are pairwise -- equal. Returns False otherwise. all_equal :: (Eq a) => [a] -> Bool all_equal xs = all (== first_element) other_elements where first_element = head xs other_elements = tail xs