Безопасность типа Haskell - это второй none только для языков с надписью. Но есть некоторая глубокая магия, происходящая с Text.Printf, которая кажется довольно тихой.
> printf "%d\n" 3
3
> printf "%s %f %d" "foo" 3.3 3
foo 3.3 3
Какова глубокая магия этого? Как функция Text.Printf.printf
принимает такие вариационные аргументы?
Какова общая техника, используемая для использования вариационных аргументов в Haskell и как она работает?
(Боковое примечание: при использовании этой техники, по-видимому, теряется безопасность какого-либо типа.)
> :t printf "%d\n" "foo"
printf "%d\n" "foo" :: (PrintfType ([Char] -> t)) => t