Como o Haskell printf funciona?

O tipo de segurança de Haskell é o segundoto none apenas para idiomas de tipo dependente. Mas há alguma mágica profunda acontecendo com Text.Printf que parece bastante instável.

> printf "%d\n" 3
3
> printf "%s %f %d" "foo" 3.3 3
foo 3.3 3

Qual é a mágica profunda por trás disso? Como pode oText.Printf.printfunção @ aceita argumentos variados como est

Qual é a técnica geral usada para permitir argumentos variados em Haskell e como funciona?

(Nota: alguns tipos de segurança aparentemente se perdem ao usar esta técnica.)

> :t printf "%d\n" "foo"
printf "%d\n" "foo" :: (PrintfType ([Char] -> t)) => t

questionAnswers(1)

yourAnswerToTheQuestion