Description
Quasiquoters for external commands.
Description
Features:
Quasiquotation syntax for external interpreters
>>> [sh_| echo hello world! |]
hello world!
Custom quasiquoters
ghci = quoter $ callCommand "ghc" ["-ignore-dot-ghci", "-e"]
Then you can use ghci
in ghci!
>>> [ghci| putStrLn "hello world!" |] :: IO ()
hello world!
For more examples, see System.Command.QQ.Predef
Haskell values embedding
See README.md for an example
DSLs
See examples/CommandT.hs
README.md
command-qq
>>> import System.Command.QQ
>>> putStr =<< unlines . reverse . lines <$> [sh|cowsay "Hello, I am command-qq!"|]
|| ||
||----w |
(__)\ )\/\
\ (oo)\_______
\ ^__^
-------------------------
< Hello, I am command-qq! >
_________________________
Install
% cabal install command-qq
Features
Quasiquotation syntax for external interpreters
>>> [sh_| echo hello world! |]
hello world!
Custom quasiquoters
ghci = quoter $ callCommand "ghc" ["-ignore-dot-ghci", "-e"]
Then you can use ghci
in ghci!
>>> [ghci| putStrLn "hello world!" |] :: IO ()
hello world!
For more examples, see System.Command.QQ.Predef
Haskell values embedding
Let's define Embed
instance for a custom data type:
data Bang = Bang
instance Embed Bang where
embed Bang = "!"
Then you can use variables of Bang
type in quoted strings!
>>> [sh_| echo hello#{Bang} |]
hello!
>>> let bang = Bang in [sh_| echo hello#{bang} |]
hello!
Note, command-qq
does not support full Haskell in embeddings, only variables/constructors names and literals
DSLs
See examples/CommandT.hs
.