+
+
+-- | Switch the x and z dimensions of a three-dimensional list.
+transpose_xz :: [[[a]]] -> [[[a]]]
+transpose_xz [] = []
+transpose_xz [[]] = [[]]
+transpose_xz [[[]]] = [[[]]]
+transpose_xz m =
+ [[[ m !! x !! y !! z | x <- [0..xsize]]
+ | y <- [0..ysize]]
+ | z <- [0..zsize]]
+ where
+ zsize = (length m) - 1
+ ysize = length (head m) - 1
+ xsize = length (head $ head m) - 1
+
+-- | 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