Как уже упоминал Стивен, лучше всего определить новую функцию, которая вызывает конструктор. Вы можете поместить его в модуль с именем String
(в некотором вашем пространстве имен), чтобы вы почувствовали то же чувство, что и при работе с другими функциями F #. Я бы, наверное, использовал:
module String =
let create (c:char[]) = new string(c)
Вопрос об использовании конструкторов в качестве первоклассных значений раньше появлялся в SO, но я больше не могу найти свой более ранний ответ - есть один очень сумасшедший прием, который дает вам такую возможность, но это огромный взлом (никто никогда не должен использовать это и некоторая следующая версия F #, мы надеемся, запретят это). В любом случае, вы можете использовать статически разрешенные параметры типа , чтобы написать следующее:
let inline ctor< ^R, ^T when ^R :
(static member ``.ctor`` : ^T -> ^R)> (arg:^T) =
(^R : (static member ``.ctor`` : ^T -> ^R) arg)
И используйте такую функцию:
"ABC".ToCharArray() |> Array.rev |> ctor<string, _>;;
Функция ctor
по существу требует, чтобы тип, указанный в качестве параметра первого типа, имел конструктор и вызывал конструктор (другой параметр типа является аргументом конструктора и выводится компилятором). Но это на самом деле просто любопытство - определение собственной функции - лучший подход.