I've been using a preprocessor to Haskell that I call HacWrite, which
adds a new kind of string appropriate for entering text. Such strings
can span multiple lines and can be escaped using curly brackets:
var1 = 2*2
var2 = 4*var1
var3 = «Foobar»
sqlstring = «insert into mytable values
(NULL,'{show(var1)}','{show(var2)}','{var3}');»
Text is enclosed within «these characters» (which are hard to find on
my keyboard, so I let Emacs insert them when I press '"'). To support
markup, stuff that follows a space inside an escape is treated as
text:
«This {bf sentence contains words in boldface}.»
Here, `bf' is a markup function from text to text.
I've found HacWrite quite useful for document writing (see
http://www.cs.chalmers.se/~hallgren/Thesis/ for a longer example :-),
but I'm sure it could be useful for CGI-scripting and the like as
well.
/M
S. Alexander Jacobson writes:
> A popular thing to do with computer languages (especially scripting
> languages) is to manipulate text and insert variables into strings.
> It is extremely irritating to escape in and out of strings via ++ in
> Haskell or + in Java/Javascript.
> e.g.
> > var1 = 2*2
> > var2 = 4*var1
> > var3 = "Foobar""
> > sqlstring = "insert into mytable values "++
> > "(NULL,'"++(show var1)++"','"++(show var2)++"','"++var3"');"
>
> It would be much nicer if Haskell did what perl,php, and tcl do:
> > sqlstring="insert into mytable values (NULL,'$var1','$var2','$var3')".
> Even nicer would be:
> > sqlstring="insert into mytable values
> (NULL,'$var1','$(var1+var2)','$var3')".
>
> (Notice both the embedded evaluation and the fact that the string runs
> accross multiple lines)
>
> Supporting this feature involves either:
> a. a syntactic transformation after you have type information (don't
> 'show' strings)
> or
> b. redefining show string not to return quotation marks
>
> To me the second makes more sense, but either way, this feature would make
> haskell programming much less annoying.
>
>
> -Alex-
>
> PS Why does show string return quotation marks? It seems inconsistent.
>
> ___________________________________________________________________
> S. Alexander Jacobson Shop.Com
> 1-212-697-0184 voice The Easiest Way To Shop