
On Sat, 2008-06-14 at 23:06 +0200, Marc Weber wrote:
Hi, I've been thinking about template haskell sugar lately.
Some cool libraries are there such as metaHDBC or the template haskell printf library.
However they all have one thing in common:
$(printf "...") a b c
$(runStmt "INSERT INTO ( ) VALUES ( ?, ?, ? )" ) 2 3 4
Would it make sense to automatically splice those functions?
{-# auto-splice: runStmt, printf #-}
So that you can just use printf "..." a b c and runStmt "INSERT INTO ( ) VALUES ( ?, ?, ? )" 2 3 4 without $() ?
Would this be convinient?
I've been iffy about this since TH was first created. It would certainly be more convenient, but it starts running into some unpleasant issues. Admittedly, most of these issues are issues of expectations, but still. One example from the CL/Scheme world, is that these macros wouldn't be proper functions, so e.g. 'map printf' wouldn't work or wouldn't mean the same thing, 'let formatString = "%s" in printf formatString' wouldn't work or wouldn't mean the same thing (thus being a violation of referential transparency, at least at a superficial level). Let's say we have a function 'mydo' that turns an applicative expression into one using monadic style. Then something like foo = runState (mydo (inc + inc)) 0 brings back some of the issues of programming in an impure language. Currently, I'm still leaning toward the more explicit syntax.