module System.Process.Lazy where
import Control.Exception as E (evaluate)
import Control.Monad
import qualified Data.ByteString.Lazy as L
import Data.List as List (map, concat)
import Data.ListLike (ListLikeIO(..))
import Data.ListLike.Text.Text ()
import Data.ListLike.Text.TextLazy ()
import qualified Data.Text as T
import qualified Data.Text.Lazy as LT
import Data.Word (Word8)
import Prelude hiding (null, length, rem)
import System.IO hiding (hPutStr, hGetContents)
import System.Process.ListLike (ListLikePlus(..))
instance ListLikePlus L.ByteString Word8 where
setModes _ (inh, outh, errh, _) = f inh >> f outh >> f errh where f mh = maybe (return ()) (\ h -> hSetBinaryMode h True) mh
readChunks h = hGetContents h >>= evaluate . Prelude.map (L.fromChunks . (: [])) . L.toChunks
instance ListLikePlus LT.Text Char where
setModes _ _ = return ()
readChunks h = hGetContents h >>= evaluate . Prelude.map (LT.fromChunks . (: [])) . LT.toChunks
instance ListLikePlus String Char where
setModes _ _ = return ()
readChunks h = readChunks h >>= return . List.map T.unpack . List.concat . List.map LT.toChunks