Re: [Haskell-cafe] When is waitForProcess not necessary?

2007-08-03 Thread Dougal Stanton
On 03/08/07, Dave Bayer [EMAIL PROTECTED] wrote:
  I'm actually calling
 Markdown.pl on tiny files (source code of lengths a human would read), and
 it is certainly sluggish enough to be a fair test.)

I had to do this recently, so you might be interested in my approach:

http://193.219.108.225/code/blogpost/BlogPost.hs

The idea here is to run arbitrary text (blog posts) through Markdown
and Smartypants before sending them out to the wider world. The code
should be pretty self-contained and easy to follow. It does use
waitForProcess but I've done my best to keep it clean. (It could still
do with being refactored though; there are still bits or repeated
code.)

The part you want is about 80% of the way down and looks like this:

educate = \s - markdown s = smartypants

markdown = convert Markdown
smartypants = convert SmartyPants

convertWith conv str = do
(hin, hout, herr, proc) - runInteractiveProcess conv [] Nothing Nothing
forkIO $ hPutStr hin str  hClose hin
str' - hGetContents hout
return (str', proc)

convert conv input = do
bracket
(convertWith conv input)
(\(_,pc) - do
ret - waitForProcess pc
return (ret==ExitSuccess))
(return . fst)


Cheers,

D.
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] When is waitForProcess not necessary?

2007-08-03 Thread Bryan O'Sullivan

Dougal Stanton wrote:


I had to do this recently, so you might be interested in my approach:

http://193.219.108.225/code/blogpost/BlogPost.hs

The idea here is to run arbitrary text (blog posts) through Markdown
and Smartypants before sending them out to the wider world.


Pardon me while I veer off-topic, but you could also use Pandoc to do 
this.  No forking required.

http://sophos.berkeley.edu/macfarlane/pandoc/

b
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] When is waitForProcess not necessary?

2007-08-03 Thread Dougal Stanton
On 03/08/07, Bryan O'Sullivan [EMAIL PROTECTED] wrote:

 Pardon me while I veer off-topic, but you could also use Pandoc to do
 this.  No forking required.
 http://sophos.berkeley.edu/macfarlane/pandoc/

I'll add that to the list of things that must be done. That list
seems, necessarily, to be longer than any list things I have done.
Last time I looked at PanDoc the docs gave the impression it was not
very complete. It looks a lot better now. The idea of LaTeX embedded
in Markdown sounds awesome...

D.
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe


Re: [Haskell-cafe] When is waitForProcess not necessary?

2007-08-02 Thread Donald Bruce Stewart
bayer:
 If one is calling runInteractiveCommand for a sure-thing returning a small
 amount of output (say, ls for a modest directory), is it necessary to call
 waitForProcess?
 
 My waitForProcess calls came under scrutiny when I tried to GHC profile a
 threaded process, which isn't possible. It turns out that my programs run
 faster if they don't call waitForProcess, and it sure seems empirically
 that they never fail to run correctly. It would seem to me that in a lazy
 language, later code wouldn't presume it was looking at an entire string
 until the actual EOF came through, completing the string.
 
 So at the end of a program, with nothing else to do but wait, why not wait
 implicitly rather than via an explicit call to waitForProcess? What am I
 missing?
 
 (I've searched this forum; an interesting example is runCommand in
 
 
 http://happs.org/HAppS/src/HAppS/Util/Common.hs
 
 but I'm asking why this isn't overkill in my scenario. I'm actually calling
 Markdown.pl on tiny files (source code of lengths a human would read), and
 it is certainly sluggish enough to be a fair test.)
 
 ___

You might be interested in :

http://www.cse.unsw.edu.au/~dons/code/newpopen/

In particular,

readProcess :: FilePath -- ^ command to run
- [String] -- ^ any arguments
- String   -- ^ standard input
- IO (Either ExitCode String)  -- ^ either the stdout, or an 
exitcode

Strict String IO for processes, without the zombies.

-- Don Stewart (Authorised by the People for System.IO.Strict party)
___
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe