@Fsharp_chat

Страница 559 из 772
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

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
Он вроде называл F# любимым языком)
не совем корректно сказал

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
в общем виде сделать не выйдет, потому что у записей и DU нет каррированных конструкторов
И нельзя сделать констрейнт на функцию с переменным числом параметров, как я понимаю

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
Но оно же не скомпилируется

Страница 559 из 772