Как передать функцию в стиле printf другой функции в F #

Я хотел бы сделать функцию в F #, которая принимает функцию в стиле printf в качестве аргумента и использует этот аргумент для вывода данных. Использование будет примерно таким:

OutputStuff printfn

Моя первая попытка состояла в том, чтобы позволить компилятору понять все это для меня:

let OutputStuff output =
    output "Header"
    output "Data: %d" 42

Это терпит неудачу, потому что это решает, чтоoutput это функция, принимающаяstring и возвращаясьunit, поэтому второй вызов не проходит.

Затем я попытался объявитьoutput иметь ту же подпись, что иprintfn:

let OutputStuff (output : Printf.TextWriterFormat<'a> -> 'a) =
    output "Header"
    output "Data: %d" 42

Это терпит неудачу, потому что компилятор решает, что реальный типoutput&nbsp;являетсяPrintf.TextWriterFormat<string> -> unit, так что снова второй вызов не удается. Он также генерирует предупреждение FS0064, указывающее, что первый вызовoutput&nbsp;делает код менее универсальным, чем аннотации типов, что является основной проблемой.

Наконец, я попытался объявить функцию вывода как отдельное сокращение типа:

type OutputMe<'a> = Printf.TextWriterFormat<'a> -> 'a
let OutputStuff (output : OutputMe<'a>) =
    output "Header"
    output "Data: %d" 42

Это терпит неудачу с теми же результатами, что и предыдущая попытка.

Как мне убедить компилятор не специализировать типoutput&nbsp;и оставить какPrintf.TextWriterFormat<'a> -> 'a?