-- example = do -- let list1 = [1, 2, 3] -- let list2 = [10, 20, 30] -- a <- list1 -- b <- list2 -- return [a, b] example_desugared = let list1 = [1, 2, 3] list2 = [10, 20, 30] in list1 >>= (\a -> list2 >>= (\b -> return [a, b] ) ) main :: IO () main = do putStrLn $ show $ example_desugared