command-qq

Quasiquoters for external commands http://biegunka.github.io/command-qq/

Latest on Hackage:0.3.0.0

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

BSD3 licensed by Matvey Aksenov

command-qq

Hackage Build Status Build 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:

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

Changes

0.3.0.0

  • Added another way to avoid variable expansion (\\#{foo} is replaced with #{foo})

0.2.2.0

  • Exported substituteVars

0.2.1.0

  • Added a bunch of predefined quasiquoters to System.Command.QQ.Predef

  • Added Embed instances for Data.Text.Text and Data.Text.Lazy.Text

0.2.0.0

  • Added sh_ quasiquoter to avoid type annotations for trivial quotes

  • Moved Eval onto Text to speed I/O up.

  • Added support for embedding literals and constructors with no arguments

  • Mored Embed instances

Used by 1 package:
comments powered byDisqus