{-# LANGUAGE TemplateHaskell #-} module System.Process.QQ ( -- * Quasi Quoters 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 } -- | Command result of (Lazy) ByteString. cmd :: QuasiQuoter cmd = def { quoteExp = \str -> [| BL.fromChunks <$> C.runResourceT (sourceCmd (LT.unpack $(quoteExp lt str)) C.$$ CL.consume) |] } -- | Source of shell command scmd :: QuasiQuoter scmd = def { quoteExp = \str -> [| sourceCmd (LT.unpack $(quoteExp lt str)) |] } -- | Conduit of shell command ccmd :: QuasiQuoter ccmd = def { quoteExp = \str -> [| conduitCmd (LT.unpack $(quoteExp lt str)) |] }