Hmm. Let me see if I can try to answer that question.
Here's a basic example:
*Text.XFormat.Show> showf ("Hello " % String % " #" % Num % "!") "World" 1
"Hello World #1!"
As you can see, this does not use the "standard printf format string." Instead, it uses a type-indexed function 'showf' to produce a new function 'showf ("Hello " % String % " #" % Num % "!")' that allows only certain types for arguments. To help see this, here is that type:
*Text.XFormat.Show> :t showf ("Hello " % String % " #" % Num % "!")
showf ("Hello " % String % " #" % Num % "!") :: (Num a) => String -> a -> String
Thus, we have a type-safe printf.
One option that I have considered is writing a quasiquoter to allow you to do standard printf format strings, but I haven't found a round tuit for that, yet.
Hope this answers your question. Thanks for bringing this up. xformat needs some TLC after a long time. I just didn't know how it would be used and what direction to take it in.
BTW, what is
haskell-libs@haskell.org ? I've never seen that before.
Regards,
Sean