
Vladimir
01.11.2017
13:22:39
Композиция тоже не катит тебе?)

Evgeniy
01.11.2017
13:22:42
Нет.
Я хочу bind.
И код, эквивалентный коду Василия, чтобы можно было сравнить адекватно.

Google

Evgeniy
01.11.2017
13:25:56
Сам вечером напишу, пожалуй.

Ivan
01.11.2017
13:32:06
+

Evgeniy
01.11.2017
13:56:03
@angmarr Мы ответили на твой вопрос? :)

Igor
01.11.2017
13:59:17
Частично, те как моноид сделать я понял (в примере есть),
но для этого не нужно HKT, а вот с монадами/Applicative пока не понятно.

Evgeniy
01.11.2017
14:05:01

Igor
01.11.2017
14:06:35
Не надо FSharpPlus, там какая-то дичь
Можно как вот тут https://github.com/Microsoft/visualfsharp/pull/3582#issuecomment-332628580

Evgeniy
01.11.2017
14:07:39
Просто FSharpPlus -- это самая продвинутая библиотека с generic-абстракциями на SRTP. :)

Igor
01.11.2017
14:08:51
Наверное, надо еще посидеть, покурить их исходинки.

Evgeniy
01.11.2017
14:15:20
Основная фишка, что SRTP умеет выбирать нужную перегрузку не только в зависимости от типов входных значений (как в примере с Add). Но и в зависимости от типа выходного значения.
Поэтому мы можем разрешить тип f a в функции pure :: a -> f a в зависимости от контекста. А дальше включается structural typing. Applicative<T> — это любой тип, который реализует методы Return и Apply.
'ApplicativeT : (static member Return: 'T -> 'ApplicativeT)
Хорошо:
+ возможно библиотечное решение с необходимыми абстракциями; стандартная библиотека остаётся простой и привычной
Плохо:
- F#-only возможность
- негативно влияет на время компиляции
- плохие сообщения об ошибках

Ivan
01.11.2017
19:47:21
Коллеги, кто нибудь смотрел https://github.com/louthy/language-ext ? Мне решение понравилось, попробовать что ли на f# way перевести?

Evgeniy
01.11.2017
19:49:55

Ivan
01.11.2017
19:52:41
Реализации на тех же идеях, что обсуждаются в мейн стримах. Возможно получится менее нагруженная чем в Csharp модель объявления генериков за счет T<_, int>
Красивая реализация взятия not null за счет implicit conversion

Google

Igor
01.11.2017
22:14:25
Ещё Марка подвезли
https://twitter.com/DotNextConf/status/925703231241621504

Dasha
01.11.2017
22:22:06
Добрый день, никто здесь случайно не знает годных книжек по прологу?

Artemy
01.11.2017
22:35:41
Ох...
@Belosnezzzka, Возможно, @gsomix тебе даст направление в чатик по Прологу, если таковой имеется. Он, как я понял, много разных чатиков знает и чуть ли не во всех состоит.)

Klei
02.11.2017
03:37:50

Evgeniy
02.11.2017
04:39:12
https://twitter.com/_cartermp/status/925931675195863040
Доброе утро.
Надо сегодня сесть за перевод.

Roman
02.11.2017
06:42:55
Хайпят. :)
Хайпим! А как не хайпить, раз уж притащили его в Москву? :)
Доброе утро!

Evgeniy
02.11.2017
06:44:24

Roman
02.11.2017
06:45:09

Evgeniy
02.11.2017
06:45:44
https://github.com/fsharplang-ru/translations/issues/27

Roman
02.11.2017
06:49:17

Vladimir
02.11.2017
07:49:31
@gsomix
https://pastebin.com/LdTKyC2L
| Method | Mean | Error | StdDev | Gen 0 | Allocated |
|----------- |-----------:|----------:|----------:|-------:|----------:|
| Choice | 15.6631 ns | 0.3496 ns | 0.6818 ns | 0.0152 | 48 B |
| Result | 0.0000 ns | 0.0000 ns | 0.0000 ns | - | 0 B |
| ResultBind | 18.8496 ns | 0.4081 ns | 0.5012 ns | - | 0 B |
| ChoiceBind | 27.7817 ns | 0.6435 ns | 1.4786 ns | 0.0305 | 96 B |

Evgeniy
02.11.2017
08:16:16
Спасибо.

Vladimir
02.11.2017
08:19:20
На здоровье) Результат практически идентичен прошлому запуску с композицией кстати

Google

Evgeniy
02.11.2017
08:21:38
В стандартной библиотеке, кстати, есть bind для Result.

Vladimir
02.11.2017
08:24:42
мм, сча его затестим

Evgeniy
02.11.2017
08:26:47
И давай уже вложенные байнды!

Anna
02.11.2017
08:29:21
Господа, простите, если немного оффтоп, но кто-нибудь пойдёт на открытую конференцию ИСП РАН? (isprasopen.ru). Там про компиляторы обязательно что-то будет, про статический и динамический анализ кода, и вообще.

Evgeniy
02.11.2017
08:30:14
Vladimir
let resultFun x y = x |> Result.bind (fun _ -> y)
resultFun (Ok 0) (Ok 0)
|> Result.bind (fun x ->
resultFun (Ok 1) (Ok 1)
|> Result.bind (fun y ->
resultFun (Ok 2) (Ok 2)
|> Result.bind (fun z ->
resultFun (Ok 3) (Ok 3)
|> Result.bind (fun h ->
Ok (x + y + z + h))))) |> ignore
О, Василий дополнил результаты запуском под Ubuntu.
Method | Mean | Error | StdDev | Scaled | Gen 0 | Allocated |
------- |---------:|----------:|----------:|-------:|-------:|----------:|
Choice | 102.6 ns | 0.0679 ns | 0.0567 ns | 1.00 | 0.0743 | 312 B |
Result | 148.7 ns | 0.2098 ns | 0.1859 ns | 1.45 | 0.0303 | 128 B |


Anna
02.11.2017
08:45:05
Если что, на isprasopen регистрация до 10 ноября. Денег им не надо.

Evgeniy
02.11.2017
08:46:29

Mikhail
02.11.2017
08:49:15
Привет всем!
А как спецсимволы в строку вставлять?
Например чтобы строка получилась "+10%"
sprintf "+%d" intPercent
sprintf "+%d%" intPercent - так ошибка

Evgeniy
02.11.2017
08:58:21

Mikhail
02.11.2017
08:59:16

Vladimir
02.11.2017
09:01:48

Evgeniy
02.11.2017
09:02:09

Google

P
02.11.2017
09:02:18

Evgeniy
02.11.2017
09:02:39
Если вообще.

Vladimir
02.11.2017
10:09:19
| Method | Mean | Error | StdDev | Gen 0 | Allocated |
|----------------------- |--------------:|-----------:|-----------:|-------:|----------:|
| Choice | 16.3119 ns | 0.3904 ns | 1.0818 ns | 0.0152 | 48 B |
| Result | 0.0000 ns | 0.0000 ns | 0.0000 ns | - | 0 B |
| ResultBind | 19.2608 ns | 0.4157 ns | 0.3889 ns | - | 0 B |
| ChoiceBind | 35.0061 ns | 0.7852 ns | 1.8661 ns | 0.0305 | 96 B |
| ResultBindWithClosures | 2,579.8346 ns | 50.7796 ns | 49.8723 ns | 0.0725 | 232 B |
| ChoiceBindWithClosures | 156.9951 ns | 3.1293 ns | 6.4626 ns | 0.1321 | 416 B |

Evgeniy
02.11.2017
10:11:22
Ага!

Vladimir
02.11.2017
10:12:51
Вывод - так не делайте)

Evgeniy
02.11.2017
10:13:58

Nikolay
02.11.2017
10:15:30
Что вы тут за эксперименты проводите? :)

Evgeniy
02.11.2017
10:15:51

Nikolay
02.11.2017
10:16:12

Evgeniy
02.11.2017
10:16:20

Nikolay
02.11.2017
10:16:34
Так и думал :)
Сломали бы уже совместимость что-ли и сделали всё грамотно

Evgeniy
02.11.2017
10:17:24
Что значит "грамотно"?

Nikolay
02.11.2017
10:19:07
Option, Choice и т.п.

Evgeniy
02.11.2017
10:19:35

Nikolay
02.11.2017
10:21:01
Ты про замыкания?

Google

Evgeniy
02.11.2017
10:21:17

Nikolay
02.11.2017
10:21:55
Ну, там же замыкания?

Evgeniy
02.11.2017
10:22:19

Nikolay
02.11.2017
10:23:00

Evgeniy
02.11.2017
10:23:11

Nikolay
02.11.2017
10:23:30
Грубо говоря, в зависимости от кейса использовать value/ref type?
Ну и вообще, нужно разобраться изначально в чем причина тормозов

Evgeniy
02.11.2017
10:23:45
Нельзя так делать!

Nikolay
02.11.2017
10:23:58

Evgeniy
02.11.2017
10:24:09
Почему?
Нельзя делать семантику неявной.
Нужно два разных типа, чтобы их можно было явно использовать.

Nikolay
02.11.2017
10:24:46
Окей, в чём тогда причина тормозов?

Evgeniy
02.11.2017
10:24:53