Не совсем.В первом случае вызов функции знает, что он применяется к строковому литералу, поэтому он может выполнить разрешение перегрузки, чтобы найти перегрузку строки.
Во втором случае line
является нерешенной переменной типа длявывод типа в точке вызова перегруженного метода WriteLine
, поэтому он не знает, какую перегрузку выбрать, и еще не видел строковый аргумент, так как вывод типа слева направо.
Измените его на
"foo" |> (fun line -> System.Console.WriteLine line)
, и оно будет работать, потому что переменная вывода типа для line
будет объединена с string
из входящего "foo", до он должен определить вызов WriteLine
.
Таким образом, они вводятся слева направо;в отсутствие решения для переменной типа, возможно, еще не удастся выбрать перегрузку.