Каррирование функций с типами, зависящими от формата

#f#

#f#

Вопрос:

Насколько мне известно, F # не обрабатывает printfn, как другие функции, из-за зависимости его типа от строкового параметра. Может ли кто-нибудь объяснить мне, почему это мешает мне делать

 let printn = printfn "%A"
 

В ошибке указано, что тип выведен ('a -> unit) и что мне нужно добавить явный параметр или аннотацию типа. Почему? Меня вполне устраивает тип, к которому он это относил. Кроме того, если я добавлю явную точку, она по-прежнему будет иметь тот же тип.

Ответ №1:

Потому printn что это было бы простое значение так, как вы его определяете. И значения не могут быть общими в .ЧИСТАЯ среда выполнения.

Сделайте параметр явным, чтобы он был функцией:

 let printn value = printfn "%A" value
 

Для получения дополнительной информации см. Раздел Ограничение значений в MSDN.

Комментарии:

1. Я в замешательстве. Как printfn тогда вообще работает? Как мне передать второй параметр, если он принимает только один и возвращает значение?