Как уже сказал Джон, ваш printHello
не является функцией - это значение типа unit
.Когда вы предоставляете printfn
все необходимые аргументы (как вы это сделали), он выполняет императивную операцию и возвращает unit
(это тип с единственным значением, записанным как ()
).Вы можете видеть, что написание этой декларации выполняет печать немедленно:
> let printHello = printfn "%A" "Hello";;
"Hello"
val printHello : unit = ()
Когда вы используете printHello
позже, оно просто ссылается на это значение unit
(которое не несет никакой информации).
Если вы хотите сделать его функцией (типа unit -> unit
), которая будет делать что-то при каждом ее выполнении, тогда вы можете использовать пример, который Джон опубликовал.
Функция printfn
былане частично применимо , потому что вы задали ему все необходимые параметры (чтобы он мог просто напечатать сразу).Если вы хотите использовать частичное приложение, вы можете использовать что-то вроде:
> let printHello = printfn "%s %s" "Hello";; // Note - didn't give value for second %s
val printHello : string -> unit
Now printHello
- это функция, которая ожидает второй параметр и затем запускает:
> printHello "World";;
Hello World
val it : unit = ()
> printHello "F#";;
Hello F#
val it : unit = ()