@Fsharp_chat

Страница 391 из 772
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
Частично, те как моноид сделать я понял (в примере есть), но для этого не нужно HKT, а вот с монадами/Applicative пока не понятно.
Не понятно, как будет со стороны пользователя? Или с точки зрения реализации в FSharpPlus?

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 перевести?

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
Хайпим! А как не хайпить, раз уж притащили его в Москву? :) Доброе утро!
Нужно тоже хайпануть — закончить перевод статьи про F# хотя бы к концу конференции.

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 ноября. Денег им не надо.

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
sprintf "+%d%%" intPercent
Спасибо, сейчас проверю!

Evgeniy
02.11.2017
09:02:09
Ты замыкания хочешь проверить?
Я просто хочу такой же код, как у Василия.

Google
P
02.11.2017
09:02:18
Добрый день, никто здесь случайно не знает годных книжек по прологу?
Мне лично понравилась "Братко Иван - Программирование на языке Пролог для искусственного интеллекта".

Evgeniy
02.11.2017
09:02:39
Ты замыкания хочешь проверить?
Чтобы понять, какой оверхед вносит computational expression.

Если вообще.

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 |

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

Evgeniy
02.11.2017
10:13:58
Вывод - так не делайте)
Это же основной кейс. :)

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

Nikolay
02.11.2017
10:16:12
Result vs Choice
А в чём разница?

Evgeniy
02.11.2017
10:16:20
А в чём разница?
Первый value type.

Nikolay
02.11.2017
10:16:34
Так и думал :)

Сломали бы уже совместимость что-ли и сделали всё грамотно

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

Nikolay
02.11.2017
10:19:07
Что значит "грамотно"?
Поменять всё на Value Type

Option, Choice и т.п.

Evgeniy
02.11.2017
10:19:35
Поменять всё на Value Type
Ну, вон Result у нас value type. Работает на порядок медленее в одном из основных кейсов.

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

Google
Evgeniy
02.11.2017
10:21:17
Ты про замыкания?
Я про вложенные bind.

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

Evgeniy
02.11.2017
10:22:19
Ну, там же замыкания?
Да. И копирования в итоге.

Nikolay
02.11.2017
10:23:00
Да. И копирования в итоге.
Ну можно же на уровне компилятора сделать оптимизации?

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

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