    -- |
    -- Copyright: 2015 Joey Hess <id@joeyh.name>
    -- License: BSD-2-clause
    --
    -- Concurrent output handling.
    --
    -- > import Control.Concurrent.Async
    -- > import System.Console.Concurrent
    -- >
    -- > main = withConcurrentOutput $
    -- > 	outputConcurrent "washed the car\n"
    -- > 		`concurrently`
    -- >	outputConcurrent "walked the dog\n"
    -- >		`concurrently`
    -- > 	createProcessConcurrent (proc "ls" [])

    {-# LANGUAGE CPP #-}

    module System.Console.Concurrent (
    	-- * Concurrent output
    	withConcurrentOutput,
    	Outputable(..),
    	outputConcurrent,
    	errorConcurrent,
    	ConcurrentProcessHandle,
    #ifndef mingw32_HOST_OS
    	createProcessConcurrent,
    #endif
    	waitForProcessConcurrent,
    	createProcessForeground,
    	flushConcurrentOutput,
    	lockOutput,
    	-- * Low level access to the output buffer
    	OutputBuffer,
    	StdHandle(..),
    	bufferOutputSTM,
    	outputBufferWaiterSTM,
    	waitAnyBuffer,
    	waitCompleteLines,
    	emitOutputBuffer,
    ) where

    import System.Console.Concurrent.Internal