I've written a cross-platform* implementation of the pipe() syscall, currently for use within Cabal:

createPipe :: IO (Handle, Handle)
https://github.com/haskell/cabal/blob/master/Cabal/tests/Distribution/Compat/CreatePipe.hsc

It's a bit of a shame to leave it in Cabal as it's generally useful.

I propose we add it to System.IO. Note that we'd have to copy the 5 lines in System.Posix.IO.createPipe into base as the above implementation would otherwise depend on the unix package.

Discussion period: 3 weeks.

* Only tested on OS X, Windows, and Linux.