lemmih: > On 9/13/06, Tim Newsham <[EMAIL PROTECTED]> wrote: > >I was rewriting some non-haskell code in haskell and came up with this > >construct: > > > > foreach l f = mapM_ f l > > > > main = do > > args <- getArgs > > foreach args (\arg -> do > > foreach [1..3] (\n -> do > > putStrLn ((show n) ++ ") " ++ arg) > > ) > > ) > > > >which is reminiscent of foreach in other languages. Seems fairly > >useful and I was wondering how hard it would be to add some syntactic > >sugar to the "do" construct to make it a little prettier (ie. > >not require the parenthesis, binding and nested do, as: > > > > main = do > > args <- getArgs > > foreach args arg > > foreach [1..3] n > > putStrLn ((show n) ++ ") " ++ arg) > > > >would this type of transformation be possible with template haskell > >or does this need stronger support from the parser to pull off? > > How about: > > main = do > args <- getArgs > flip mapM_ args $ \arg -> > flip mapM_ [1..3] $ \n -> > putStrLn $ show n ++ ") " ++ arg >
Which is, with current Control.Monad: main = do args <- getArgs forM_ args $ \arg -> forM_ [1..3] $ \n -> putStrLn $ show n ++ ") " ++ arg I think Tim is looking for an if-then-else "real syntax" feel to his `foreach' though. I.e. TH or some small preprocessor. -- Don _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe