The standard library provides a printf function which manages to be varadic. What it doesn't do, however, is compile-time checking of whether the argument types match the format string. That would require dependent types, and it sounds like it would be really hard to implement too! (You'd have to parse the entire format string using type signatures... yuck!)
But on reflection, now I'm wondering... Can we do this with Template Haskell? In fact, has anybody written a library for this already??
(It looks like you could fairly easily write a quasi-quoter that reads a printf format spec and generates the necessary N-arg function...)