Тип printfn в F #, статическая или динамическая строка

Я только начал играть с F # в Mono, и возникла следующая проблема, которую я не совсем понимаю. Поиск информации наprintfn а такжеTextWriterFormat просветления тоже не принес, поэтому я подумал, что собираюсь спросить здесь.

В FSI я запускаю следующее:

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

Просто нормальная строка и печать ее. Хорошо. Теперь я хотел объявить переменную, содержащую эту же строку, и вывести ее тоже:

> 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>'

Из моего прочтения я понял, чтоprintfn требует постоянной строки. Я также понимаю, что я могу обойти эту проблему с чем-то вродеprintfn "%s" v.

Тем не менее, я хотел бы понять, что происходит с набором текста здесь. Очевидно, что"hello" имеет типstring так же какv является. Почему тогда проблема с типом? Являетсяprintfn что-то особенное? Насколько я понимаю, компилятор уже выполняет проверку типов аргументов первой строки, так чтоprintfn "%s" 1 терпит неудачу .. это, конечно, может не работать с динамическими строками, но я предположил, что это будет просто удобством со стороны компилятора для статического случая.

Ответы на вопрос(4)

Ваш ответ на вопрос