
Hi all, In my free time, I'm writing a Go program in Haskell. Main platform is GHC and GHCi under Win32. It is coming along nicely: it has a GUI and the moves it comes up with are starting to make some sense. For testing (and maybe later training :) purposes I want it to be able to play against GnuGo (the strongest Open Source Go program) on its own. Currently, to get GnuGo to think up a move, I use something like (SGF is the standard way of outputting Go games): | do writeFile "in.sgf" (showAsSGF game) | let cmd = "echo quit > gnugo --quiet --infile in.sgf --color " ++ | (show computerColor) ++ | " --mode ascii > out.txt" | system cmd | result <- readFile "out.txt" | return (parseResultMove result) I think this both ugly and inefficient: for every move a new instance of GnuGo gets started and an SGF file is output! Instead, I want to start GnuGo only once per game and communicate with it like a human player would, by typing commands at it; or by using the Go Text Protocol which is specifically designed for computer-computer play. Does anybody here know a way - under Win32 - to start a process in the background and communicate with it via its stdin/stdout? I've poked around a bit in the Win32 library source, looking for an FFI interface to CreateProcess (the API function which does what I want) but found nothing. The Posix library looks like it should be up to the job, but unfortunately that isn't supported under Win32... (I'm not using Cygwin) Any help would be appreciated! Cheers, Jan de Wit