Quasiquote 'str' implements multiline strings with interpolation.
Interpolating a value into the string is done by
$$
and interpolating anything with instance Show is
Repetitive patterns can be made with # symbol:
#<pattern> in <list>: <interpolated string> (|<interpolated string>)#
Where (|) denotes optional separator for the elements.
Multiline indentation is handled by aligning on smallest un-empty line after the first. Neither pattern matching nor nested #-patterns are supported, however, see example below.
Normal '\n' style escaping of special characters
is intentionally not supported. Please use
As an example, let's plot set of vectors with gnuplot:
plotVecs :: [(String,[Double])] -> String
plotVecs vs =
[$str| ## Plot multiple vectors
plot #(n,_) in vs:'-' with lines lw 5 title $:n$ |, #
#d in map snd vs:$singleVec d$$endline$e$endline$# |]
where
singleVec n = [$str|#(e,i) in zip n [1..]: $:i$ $:e$|$endline$#|]
*Gnuplotter> plotVecs [("A",[1..5]),("B",[2..6])]
# Plot multiple vectors
plot '-' with lines lw 5 title "A" , '-' with lines lw 5 title "B"
1 1.0
2 2.0
3 3.0
4 4.0
5 5.0
e
1 2.0
2 3.0
3 4.0
4 5.0
5 6.0
e
- 0.2.5.1 - Compiles with GHC 7.0.1
- 0.2.5.2 - Compiles with GHC 6.12