Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

LENS и Fluid Style а-ля LINQ #9

Closed
impworks opened this issue Oct 9, 2012 · 4 comments
Closed

LENS и Fluid Style а-ля LINQ #9

impworks opened this issue Oct 9, 2012 · 4 comments
Assignees
Labels
Milestone

Comments

@impworks
Copy link
Owner

impworks commented Oct 9, 2012

Поскольку параметры в функции передаются без скобок, LINQ-вызов на LENS получится довольно громоздким и неудобным:

(((Enumerable.Range 1 100).Where x:int -> x > 10).Select x:int -> x * 2

В F# для этого используется оператор |>, и код выглядит так:

let data = Emumerable.Range 1 100
let res = data
|> IEnumerable.filter (fun x -> x > 10)
|> IEnumerable.map (fun x -> x * 2)

У нас же оператор |> сейчас используется для обратной цели - перед ним стоит функция, а после него - аргумент, не поместившийся на строку.

Возможно, есть смысл пересмотреть эту концепцию. Для передачи многих параметров в функцию использовать <|, а для передачи значения по цепочке функций использовать оператор |>? Тогда linq-вызов выглядел бы так:

var data = Enumerable.Range 1 100
let res = data
|> IEnumerable.Where x:int -> x > 10
|> IEnumerable.Select x:int -> x * 2

А передача - так:

var result = somefx
<| param1
<| param 2
@ghost ghost assigned impworks Oct 9, 2012
@impworks
Copy link
Owner Author

@ForNeVeR, думаю оставить эту фичу на попозже, когда основное ядро уже будет работать и можно будет понаворачивать дополнительных возможностей. Сложно будет модифицировать парсер для этого?

@ForNeVeR
Copy link
Collaborator

Если это можно описать в грамматике - это можно сделать и в парсере. Пока что я ровнёхонько однозначно "перевожу" Grammar.txt на F#, и не встретил каких-то невыразимых мест.

@impworks
Copy link
Owner Author

Возвращаясь к этому тикету, задумался о необходимости писать IEnumerable.Where. Ведь эту штуку можно и не писать - тип выражения автоматически сопоставится с возможными типами первых аргументов найденных Extension-методов.

По сути, операторы |> и <| нужны в первую очередь для изменения приоритета, позволяя избежать лишних скобок, но своего отдельного смысла не несут.

Кстати, может быть, заменить их на @> <@? Или какие-то другие значки? Мне вертикальная черта что-то разонравилась :)

@impworks
Copy link
Owner Author

impworks commented Mar 7, 2013

<| у нас уже используется. Добавлю изменение в грамматике для поддержки |> и закрываю тикет. Сама поддержка extension-методов будет сделана в #19.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants