
Roman
18.04.2018
17:07:06
слишком hopac

Evgeniy
18.04.2018
17:07:32
По мотивам обсуждения, где рассказывали, что язык без early return не может быть пригодным в промышленной разработке. :)
Ну, и десятки других примеров странного кода на http://fssnip.net

Vasily
18.04.2018
17:09:21
чувак, главный в xamarin, как-то говорил, что это главное, что ему не нравиться в F#

Google

Vasily
18.04.2018
17:09:36
отсутствие return

Roman
18.04.2018
17:14:52

Vasily
18.04.2018
17:15:02
ага

Roman
18.04.2018
17:15:06
Он вроде называл F# любимым языком)

Vasily
18.04.2018
17:15:18
в интервью каком-то
клянусь

Roman
18.04.2018
17:16:19
https://www.reddit.com/r/programmerchat/comments/4dxpcp/i_am_miguel_de_icaza_i_started_xamarin_mono_gnome/d1v954m/

Evgeniy
18.04.2018
17:17:16
Vasily @auduchinok А какие планы на эту фичу? В каком EAP ждать?
https://github.com/JetBrains/fsharp-support/pull/8

Eugene
18.04.2018
17:17:59
Уже где-нибудь в еапах 2018.2, полагаю.)

Roman
18.04.2018
17:18:53
клянусь
https://www.reddit.com/r/programmerchat/comments/4dxpcp/i_am_miguel_de_icaza_i_started_xamarin_mono_gnome/d1v9ttk/
оо, какой милый комментарий
https://www.reddit.com/r/programmerchat/comments/4dxpcp/i_am_miguel_de_icaza_i_started_xamarin_mono_gnome/d1vl4fx/

Vasily
18.04.2018
17:20:59
не, я думаю он прям говорил "люблю я return, ничего не могу с собой поделать!"

Google

Vasily
18.04.2018
17:21:12
я прям насторожился

Roman
18.04.2018
20:19:42
Привет!

Evgeniy
19.04.2018
05:41:02
https://blogs.msdn.microsoft.com/dotnet/2018/04/18/performance-improvements-in-net-core-2-1/

Siarhei
19.04.2018
06:41:17

Vlad
19.04.2018
11:34:17
https://github.com/fsharp/fssf-ask-the-board/issues/8

Roman
19.04.2018
12:06:57
https://github.com/ninjarobot/fwrules
https://github.com/TheAngryByrd/Hopac.Websockets

Vasily
19.04.2018
14:05:26
Коллеги, есть вопрос
Про билдеры
Допустим, я написал Bind
Который возвращает функцию вида 'x->'a
Далее у меня есть Return x=x
И в билдере я хочу написать return {A=a;B=b}
Где a=x->'a
Точнее, результат выполнения данной функции
А b= x->'b
В общем, вопрос, такое как-нить можно провернуть, чтобы в ретурне были видны значения не паршл апплаев, а собственно результаты?

Vasily
19.04.2018
16:39:55
@vshapenko погляди в сторону Run
он вызывается в самом конце
там можешь сделать эплай, к примеру

Google

Vasily
19.04.2018
16:40:42
Ну мне бы что-то, что ещё и в ретурн подставить

Vasily
19.04.2018
16:40:43
и получишь результат
покажи код лучше
а, ты хочешь делать bind внутри экспрешенов? Это врядли получится

Vasily
19.04.2018
16:42:23
Угу
Чтобы в бинды прилетал паршиво апплай
Паршиал
А в ретурн уже полное применение
Причем ретурн обычно record expression
В общем, заполнение полей объекта

Vasily
19.04.2018
16:44:21
что-то такое было в AsyncSeq, где у них разные типы "внутри" CE и в резалте.
был блог пост Петрисека, кажется с подробностями
хотя может это совсем не то ?
но взгляни

Vasily
19.04.2018
16:45:07
Я понимаю, как это сделать через функцию создания объекта с набором параметров
Но это на каждый тип такую функцию надо писать

Vasily
19.04.2018
16:48:16
а. это типа applicative? Типа fun x y z -> Foo(x, y, z) <!> f <*> g <*> h? Может тебе это надо?
Накидай лучше реальный код - посмотрим.

Vasily
19.04.2018
16:48:42
Ну типа того скорее всего
Ща

Google

Vasily
19.04.2018
16:49:53
Условно, я хочу создать схему начитывания объекта из источника данных

Vasily
19.04.2018
16:50:01
а, ну так монады не катят для этого. Для этого именно аппликативные функторы и нужны - это когда и значение, и функция внутри "контекста", это позволяет делать композицию функций, не вылезая из него.

Vasily
19.04.2018
16:50:50
Я правильно понимаю, что надо контекст начитывания передавать?
В билдер
Условный ридер и апплаить его на бинде

Vasily
19.04.2018
16:52:24
не, ты не понял
в общем виде сделать не выйдет, потому что у записей и DU нет каррированных конструкторов

Vasily
19.04.2018
16:53:11
Тогда прошу более подробных разъяснений

Vasily
19.04.2018
16:54:10
Может я не понимаю твою задачу. Я тебе говорю - покажи код и что именно ты хочешь. На словах это трудно предствить.

Vasily
19.04.2018
16:54:13

Vasily
19.04.2018
16:54:38
Не знаю. Врядли.
В хаскеле это красиво, потому что и записи, и data - у всех как раз каррированные конструкторы.
типа MyRec <$> getArg1 <*> getArg2 <*> getArg3

Vasily
19.04.2018
16:59:45
https://sharplab.io/#v2:DYLgZgzgNAJiDUAfA9gBwKYDsAEBlAnhAC7oC2AsAFBH4bYAqAvAN4CGIAlpkQL5U10AQgFcOwGOgBOACgCUjKtlJkARlOxEAFhwgA6QVxjTSUMLOyNsYJYuWk1kjdr0AldEWGTM0gB7yfioGUwO7YkuisMGGMAMxBImISMrLMIUQAhNg+FuGR2AAMitjFJSXhHl7YbIw+fJRUddhUQA
По синтаксису похоже на это
https://sharplab.io/#v2:DYLgZgzgNAJiDUAfA9gBwKYDsAEBlAnhAC7oC2AsAFBH4bYAqAvAN4CGIAlpkQL5U10AQgFcOwGOgBOACgCUjKtlJkARlOxEAFhwgA6QVxjTSUMLOyNsYJYuWk1kjdr0AldEWGTM0gB7yfioGUwO7YkuisMGGMAMxBImISMrLMIUQAhNg+FuGRitgFhYXhHl7YbIw+fJRU1dhUQA
Точнее так
ЧТобы до return на все let! применился паршиал апплай

Vasily
19.04.2018
17:07:48
ну тогда это просто Reader
не?

Google

Vasily
19.04.2018
17:08:22
а, блин. не, так точно нельзя
ты хочешь что-то сделать с переменной внутри экспрешена, так нельзя
для этого нужны макросы :)

Vasily
19.04.2018
17:13:43
Мне кажется , скорее методу ретурн не хватает неявного контекста,куда пробрасываются бинды

Vasily
19.04.2018
17:15:30
ну и как ты себе это представляешь?

Vasily
19.04.2018
17:16:59
По факту, мой вариант предполагает смену типа переменной при входе в ретурн
С сохранением имени
Как это сделать, для меня загадка

Vasily
19.04.2018
17:17:35
Ты разверни твой CE в континьюэшены, тогда станет ясно.
Для этого добавь метод Quote в билдер
в return у тебя просто x в скоупе. Это обычная переменная. Ты не можешь определить, что именно ее надо зааплаить.
вот например для
Builder() {
let! x =read
return { a = 1 }
}
выдает
val it : Quotations.Expr<T> =
Call (Some (ValueWithName (FSI_0002+Builder, builder@)), Bind,
[Lambda (r, Call (None, read, [r])),
Lambda (_arg1,
Let (x, _arg1,
Call (Some (ValueWithName (FSI_0002+Builder, builder@)),
Return, [NewRecord (T, Value (1))])))])

Vasily
19.04.2018
17:25:54
Да это я понимаю, что там происходит
Мне интересно, как сделать, чтобы происходило немного по-другому

Vasily
19.04.2018
17:27:24
ну для return { a = x() } аст будет [NewRecord (T, Application (x, Value (<null>)))])))])
можно трансформировать аст и потом выполнить в рантайме :)

Vasily
19.04.2018
17:33:38
Но оно же не скомпилируется