[Haskell-cafe] Re: optimization help
Bulat Ziganshin
bulat.ziganshin at gmail.com
Sat Oct 14 04:43:48 EDT 2006
Hello apfelmus,
Thursday, October 12, 2006, 4:42:14 PM, you wrote:
> A better solution would be to begin output before the the whole input is
> read, thus making things more lazy. This can be done the following way:
> from the input, construct a lazy list of (date,line) pairs. Then, let
> foldM thread a map from dates to corresponding output file pointers
> through the list and, at the same time, use the file pointers to output
> the line in question via appendFile. This way, every line consumed is
> immediately dispatched to its corresponding output file and things
> should only require memory for the different dates, besides buffering.
> In a setting without IO, the task corresponds to the "Optimization
> Problem" discussed at length in September on this list. The problem here
> is that writeFile currently cannot be interleaved lazily, this has to be
> simulated with appendFile. We can read files lazily but we cannot output
> them lazily.
> Can this be remedied? Can there be a version of writeFile which is, in a
> sense, dual to getContents?
this can be solved in other way. here is a program that reads stdin
and puts to stdout lines starting with '>' and to stderr the rest.
note that our main processing function is pure:
main = do a <- getContents
let b = map (processing stdout stderr) (lines a)
mapM_ (\(file,line) -> hPutStrLn file line) b
processing file1 file2 line
= if ">" `isPrefixOf` line
then (file1,line)
else (file2,line)
--
Best regards,
Bulat mailto:Bulat.Ziganshin at gmail.com
More information about the Haskell-Cafe
mailing list