Я думаю, что проблема может заключаться в путанице между конструктором System.String
и string
функции.
string
функция преобразует любой объект в строку, в основном вызывая ToString()
, который для массива Char просто выводит имя типа: System.Char[]
.
С другой стороны, System.String
класс имеет несколько перегруженных конструкторов, один из которых является массивом символов, поэтому он создает строку:
[| 'a'; 'b'; 'c'|] |> string |> printfn "%A" // "System.Char[]"
[| 'a'; 'b'; 'c'|].ToString() |> printfn "%A" // "System.Char[]"
[| 'a'; 'b'; 'c'|] |> String |> printfn "%A" // "abc"
6 |> string |> printfn "%A" // "6"
6 .ToString() |> printfn "%A" // "6"
6 |> String |> printfn "%A" // error: no overloads for int
"abc" |> string |> printfn "%A" // "abc"
"abc" .ToString() |> printfn "%A" // "abc"
"abc" |> String |> printfn "%A" // Strangelly enough gives error too