{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses, ScopedTypeVariables, TypeFamilies, TypeSynonymInstances #-} -- | ListLikePlus instances for strict types - these are more -- dangerous, if you start a long running process with them they will -- block until the process finishes. Why not try a lazy type? {-# OPTIONS_GHC -fno-warn-orphans #-} module System.Process.Strict where import Control.DeepSeq (force) import Data.ByteString.Char8 as B (ByteString) import Data.ListLike.IO (hGetContents) import Data.Text as T (Text) import Data.Word (Word8) import System.IO (hSetBinaryMode) import System.Process.ListLike (ListLikePlus(..)) instance ListLikePlus B.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 >>= return . force . (: []) instance ListLikePlus T.Text Char where setModes _ _ = return () readChunks h = hGetContents h >>= return . force . (: [])