--List Comprehensions using Monads

lc1 = [(x,y) | x <- [1..10], y <- [1..x]]

lc1' = do x <- [1..10]
          y <- [1..x]
          return (x,y)

lc1'' = [1..10] >>=  (\x -> 
                      [1..x] >>= (\y ->
                                  return (x,y)))

lc3 = [(x,y) | x <- [1..10], y <- [1..x], x+y<=10]

lc3' = do x <- [1..10]
          y <- [1..x]
          True <- return (x+y<=10)
          return (x,y)

lc3'' = [1..10] >>=  (\x -> 
                      [1..x] >>= (\y ->
                                  return (x+y<=10) >>= (\b -> case b of True -> return (x,y)
                                                                        _    -> fail "")))
