{-# LANGUAGE TemplateHaskell #-} module System.Process.QQ ( cmd, scmd, ccmd, ) where import Control.Applicative import qualified Data.ByteString.Lazy as BL import qualified Data.Conduit as C import qualified Data.Conduit.List as CL import qualified Data.Text.Lazy as LT import Language.Haskell.TH.Quote import Text.Shakespeare.Text import Data.Conduit.Process def :: QuasiQuoter def = QuasiQuoter { quoteExp = undefined , quotePat = undefined , quoteType = undefined , quoteDec = undefined } cmd :: QuasiQuoter cmd = def { quoteExp = \str -> [| BL.fromChunks <$> C.runResourceT (sourceCmd (LT.unpack $(quoteExp lt str)) C.$$ CL.consume) |] } scmd :: QuasiQuoter scmd = def { quoteExp = \str -> [| sourceCmd $(quoteExp lt str) |] } ccmd :: QuasiQuoter ccmd = def { quoteExp = \str -> [| conduitCmd $(quoteExp lt str) |] }