On Wed, 2002-11-13 at 22:43, William Lee Irwin III wrote: > 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: [...]
I need this behavior often enough to justify writing a small module to provide it: Full version at http://tea.moertel.com/~thor/ravt/ravt-0.9/GetInput.hs -- GetInput.hs -- Tom Moertel <[EMAIL PROTECTED]> -- CVS $Id: GetInput.hs,v 1.1 2002/09/09 04:57:23 thor Exp $ -- | This module provides a method of getting input from files named -- on the command line or, if no files are provided, from standard -- input. This mimics Perl's default input handling, which is -- convenient. Also, the module provides versions of the standard -- 'interact' function that use these input-getting behaviors. module GetInput ( getInputDefault, getInputFromArgs , interactDefault, interactFromArgs) where import Control.Monad (liftM) import System.Environment (getArgs) -- | Reads the arguments passed on the command line and then passes -- them to 'getInputFromArgs' for handling. getInputDefault :: IO String getInputDefault = getArgs >>= getInputFromArgs -- | Treats the input list as a list of files from which to read -- input sequentially. If the list is empty, input is read from -- standard input. If "-" is passed as a file, it is taken to -- mean standard input. getInputFromArgs :: [String] -> IO String getInputFromArgs [] = getContents getInputFromArgs xs = liftM concat (mapM readFromFile xs) where readFromFile "-" = getContents readFromFile file = readFile file -- | Gets input via 'getInputDefault', processes it with the -- function argument @f@, and then prints the @String@ that -- @f@ returns. interactDefault :: (String -> String) -> IO () interactDefault f = getInputDefault >>= putStrLn . f -- | Gets input via 'getInputFromArgs', processes it with the -- function argument @f@, and then prints the @String@ that -- @f@ returns. interactFromArgs :: [String] -> (String -> String) -> IO () interactFromArgs args f = getInputFromArgs args >>= putStrLn . f _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe
