On Wed, 13 Nov 2002, William Lee Irwin III wrote: >> main = mapM_ (\h -> mapM_ putChar =<< hGetContents h) =<< mapM (flip openFile $ >ReadMode) =<< getArgs
On Wed, Nov 13, 2002 at 07:46:41AM -0800, Hal Daume III wrote: > main = interact id There is a semantic difference here, as the version I posted above takes files from the command-line, though it does fail to accommodate the pass-through case, which is handled by: main = getArgs >>= \args ->if args == [] then interact id else mapM readFile args >>= mapM_ putStr .. which seems to be a bit above 80 chars. Some library function trickery is probably in order to cut the if statement down to size. e.g. nonEmptyMapM_ :: Monad m => m () -> (t -> m ()) -> [t] -> m () nonEmptyMapM_ def _ [] = def nonEmptyMapM_ _ f xs@(_:_) = mapM_ f xs main = getArgs >>= nonEmptyMapM_ (interact id) ((>>= putStr) . readFile) Bill _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe