Skip to content

Repository files navigation

command-qq

HackageBuild StatusBuild Status

>>> 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:

dataBang=BanginstanceEmbedBangwhere
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

About

Quasiquoters for external commands

Resources

Stars

6 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages