Given the minimal syntactic overhead and the do-syntax overload/Monad type class, Haskell is a great language to do these embedded DSLs in.
[1] http://www2.informatik.uni-freiburg.de/~thiemann/WASH/