Tipo de printfn em F #, sequência estática vs dinâmica

Comecei a brincar com o F # em Mono e surgiu o seguinte problema que não consigo entender direito. Procurando informações emprintfn eTextWriterFormat também não trouxe iluminação, então pensei em perguntar aqui.

No FSI, eu executo o seguinte:

> "hello";;
val it : string = "hello"
> printfn "hello";;
hello
val it : unit = ()

Apenas uma sequência normal e imprimi-la. Bem. Agora eu queria declarar uma variável para conter a mesma string e imprimi-la também:

> let v = "hello" in printfn v ;;
let v = "hello" in printfn v ;;
---------------------------^
\...\stdin(22,28): error FS0001: The type 'string' is not compatible with the type 'Printf.TextWriterFormat<'a>'

Eu entendi pela minha leitura queprintfn requer uma cadeia constante. Eu também entendo que posso resolver esse problema com algo comoprintfn "%s" v.

No entanto, eu gostaria de entender o que está acontecendo com a digitação aqui. Claramente,"hello" é do tipostring assim comov é. Por que existe um problema de tipo então? Éprintfn algo especial? Pelo que entendi, o compilador já realiza verificação de tipo nos argumentos da primeira string, de modo queprintfn "%s" 1 falha .. é claro que isso poderia não funcionar com seqüências dinâmicas, mas presumi que fosse uma mera conveniência do lado do compilador para o caso estático.

questionAnswers(4)

yourAnswerToTheQuestion