fork download
  1. import Control.Monad
  2.  
  3. foo n = do
  4. i <- [1..n]
  5. j <- [i..n]
  6. k <- [j..n]
  7. return (i, j, k)
  8.  
  9. bar n = [ (i, j, k) | i <- [1..n], j <- [i..n], k <- [j..n] ]
  10.  
  11. baz n = concat $ concat $
  12. map (\i -> map (\j -> map (\k -> (i, j, k))
  13. [j..n])
  14. [i..n])
  15. [1..n]
  16.  
  17. main = let n = 3 in
  18. forM_ [foo, bar, baz] $ \f ->
  19. print $ f n
  20.  
Success #stdin #stdout 0s 4556KB
stdin
Standard input is empty
stdout
[(1,1,1),(1,1,2),(1,1,3),(1,2,2),(1,2,3),(1,3,3),(2,2,2),(2,2,3),(2,3,3),(3,3,3)]
[(1,1,1),(1,1,2),(1,1,3),(1,2,2),(1,2,3),(1,3,3),(2,2,2),(2,2,3),(2,3,3),(3,3,3)]
[(1,1,1),(1,1,2),(1,1,3),(1,2,2),(1,2,3),(1,3,3),(2,2,2),(2,2,3),(2,3,3),(3,3,3)]