-- | The standard factorial function. See
-- <http://www.willamette.edu/~fruehr/haskell/evolution.html> for
-- possible improvements.
+--
+-- Examples:
+--
+-- >>> factorial 0
+-- 1
+--
+-- >>> factorial 4
+-- 24
+--
factorial :: Int -> Int
factorial n
| n <= 1 = 1
-- | Takes a three-dimensional list, and flattens it into a
-- one-dimensional one.
+--
+-- Examples:
+--
+-- >>> flatten [ [[1,2], [3,4]], [[5,6], [7,8]] ]
+-- [1,2,3,4,5,6,7,8]
+--
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