На самом деле оператор канала ничего не делает, а просто меняет функцию и аргумент, насколько мне известно, между f1 (f2 3)
и 3 |> f2 |> f1
нет никакой разницы, кроме того, что последний легче читать, когда вы много объединяетесь в цепочку.
edit : это фактически определено просто так: let inline (|>) x f = f x
.
Полагаю, причина того, что вы склонны видеть подход List.map больше, чем Linq, заключается в том, что в OCaml (предшественнике F #) эти операторы всегда были там, поэтому этот стиль кодирования действительно укоренился в функциональных программистах. считать. Список - это очень базовая концепция в F #, он немного отличается от IEnumerable (это ближе к Seq).
Linq - это в значительной степени обязательство перенести эти концепции функционального программирования на C # и VB. Таким образом, они находятся на платформе .Net и поэтому доступны, но в F # они отчасти избыточны.
Также List.map - очень простая операция, , тогда как подход Linq включает в себя всю инфраструктуру с отложенной оценкой и т. Д., Что влечет за собой некоторые накладные расходы. Но я не думаю, что это будет иметь существенное значение, пока вы действительно не будете его много использовать. В некоторых разговорах я слышал, что причина, по которой компилятор C # больше не использует Linq, заключается в этом, но в обычной жизни вы вряд ли это заметите.
Итак, в общем, делай то, что тебе лучше всего, нет правильного или неправильного. Лично я бы пошел с операторами List, потому что они более стандартны в «идиоматическом» F #.
GJ