import Control.Monad for :: [a] -> (a -> b) -> [b] for = flip map cube :: Integer -> Integer -> Integer -> [[[Integer]]] cube x y z = for [0..x-1] $ \i -> for [0..y-1] $ \j -> for [0..z-1] $ \k -> z*y*i + z*j + k main :: IO () main = printCube $ cube 2 3 4 where printCube = mapM_ ((const $ putStrLn "") <=< mapM_ print)