@Fsharp_chat

Страница 582 из 772
Evgeniy
26.05.2018
06:33:25
Надо запилить.
Например, поддержка Elm. https://github.com/quicktype/quicktype/blob/master/src/language/Elm.ts

F# Weekly #21, 2018 – .NET Core 2.1 & F# Relaxation achieved, 200% https://sergeytihon.com/2018/05/26/f-weekly-21-2018-net-core-2-1-f-relaxation-achieved-200/

Friedrich
27.05.2018
06:39:39
Чуваки, идёмте бухтеть! https://github.com/Microsoft/visualfsharp/issues/5019

Vlad
27.05.2018
06:52:01
Чуваки, идёмте бухтеть! https://github.com/Microsoft/visualfsharp/issues/5019
Прочитал как бухать и не понял повода

Google
Friedrich
27.05.2018
06:58:37
По какому поводу?
Ну тип у нас всё тормозит

Но это можно пофиксить!

Evgeniy
27.05.2018
06:59:09
Ну тип у нас всё тормозит
А почему ты сравниваешь две разные функции?

Friedrich
27.05.2018
06:59:19
Evgeniy
27.05.2018
07:01:43
А чем они отличаются?
> let typeOfSeqInt = typeof<seq<int>>;; val typeOfSeqInt : System.Type = System.Collections.Generic.IEnumerable`1[System.Int32] > let typeDefOfSeqInt = typedefof<seq<int>>;; val typeDefOfSeqInt : System.Type = System.Collections.Generic.IEnumerable`1[T]

Friedrich
27.05.2018
07:02:20
Там же у меня тоже написано typeof(List<>)

Вроде то же самое. Или ты видишь разницу?

Evgeniy
27.05.2018
07:04:09
Да, пропустил.

Friedrich
27.05.2018
07:06:40
Мб у нас на F# можно вызывать typedefof у всякой ерунды, и оно в рантайме будет пытаться получать GetGenericTypeDefinition?

Да, действительно. member this.M<'T>() = typedefof<'T>

На C# такое выражение не существует и не имеет смысла.

Google
Evgeniy
27.05.2018
07:15:26
@fvnever Придется в компиляторе костыли городить.

Friedrich
27.05.2018
07:15:49
Будто что-то плохое. Там уже столько костылей, что никто и не заметит, если я чуть больше добавлю!

Evgeniy
27.05.2018
07:16:04
А ты добавишь?

Friedrich
27.05.2018
07:16:27
Дак ну наверняка остальным пофиг!

Впрочем, енто дело побенчить надо будет сперва, конечно.

Evgeniy
27.05.2018
07:20:32
?

@fvnever Есть идеи как?

Friedrich
27.05.2018
07:20:49
Что «как»?

Evgeniy
27.05.2018
07:21:00
Как добавить.

Friedrich
27.05.2018
07:21:30
Как исправить? Ну, в CIL-то понятно, что делать. Можно оптимизировать кейсы, когда передаваемый тип заранее известен (я думаю, это 95% всех реальных использований typedefof).

Evgeniy
27.05.2018
07:23:36
Сложно. Получается, тебе нужно будет сделать так, чтобы компилятор знал о typedefof.

Friedrich
27.05.2018
07:23:46
Хорошо, что у нас нету HKT, а то было бы сложнее ?

Evgeniy
27.05.2018
07:24:11
@fvnever А как это в CIL выглядит, кстати?

Friedrich
27.05.2018
07:24:12
Сложно. Получается, тебе нужно будет сделать так, чтобы компилятор знал о typedefof.
А разве он сейчас не знает? Мне казалось, это конструкция языка, а не просто функция где-то в FSharp.Core

Friedrich
27.05.2018
07:24:38
Это функция.
Странно, что она инлайнится даже в дебажной сборке!

Evgeniy
27.05.2018
07:24:54
let inline typeof<'T> = let tok = (# "ldtoken !0" type('T) : System.RuntimeTypeHandle #) System.Type.GetTypeFromHandle(tok) let inline typedefof<'T> = let ty = typeof<'T> if ty.IsGenericType then ty.GetGenericTypeDefinition() else ty

Friedrich
27.05.2018
07:25:44
@fvnever А как это в CIL выглядит, кстати?
А я же там в репорте написал

Evgeniy
27.05.2018
07:26:31
Ок, я имел в виду наш inline CIL в F#.

Google
Friedrich
27.05.2018
07:26:53
Но ты его уже сам нашёл ?

Evgeniy
27.05.2018
07:27:26
Да, и он работает не так, как нам нужно.

Без костыля в компиляторе точно не обойдется.

Friedrich
27.05.2018
07:27:42
Я не уверен, что тут можно будет ввернуть как нужно

Разве что если оптимизатором?

Ну, оптимизатор может же разрезолвить эти IsGenericType статически.

Evgeniy
27.05.2018
07:56:04
Но это усложняет все дело. :)

Friedrich
27.05.2018
07:56:39
Делает его интереснее!

Mikhail
27.05.2018
09:39:20
Привет! Подскажите, как при декомпозиции списка, сохранить ссылку на весь список? например let foo fullList@(x::xs) = ...

Mikhail
27.05.2018
09:42:23
благодарю

Roman
27.05.2018
14:38:40
​​Pearls of Functional Algorithm Design (2015) Автор: Ричард Берд #algorithms #books Проектирование и использование алгоритмов является неотъемлемой частью профессионального программирования. Из этой книги вы узнаете о проектировании алгоритмов в функциональном стиле на языке программирования Haskell. Основные алгоритмы, рассмотренные в книге, применяются в создании игровой логики, головоломок, комбинаторных построениях, сжатии данных и сопоставлении строк. В книге рассматриваются следующие темы: ✔️ наименьшее отсутствующее число; ✔️ задача о выборке; ✔️ сортировка попарных сумм; ✔️ поиск знаменитостей; ✔️ преобразование Барроуза-Уилера; ✔️ простой алгоритм решения судоку; ✔️ упорядоченная вставка и многое другое. Преимущества: ➕ обзор многочисленных популярных алгоритмов; ➕ множество примеров; ➕ подходит начинающим. Недостатки: ➖ плохой перевод.

Григорий
28.05.2018
04:51:26
Всем привет, можно как-то посчитать количество вариантов в DU ? Предположим есть: type Data = A | B | C countElement(Data) ///output 3

Vladimir
28.05.2018
05:10:54
Можно превратить его в enum и посчитать

Григорий
28.05.2018
05:21:41
Friedrich
28.05.2018
05:48:36
Правда, он упадёт в рантайме, если ему передать плохой тип (не являющийся F# union). Констрейнт на такое нельзя написать

Григорий
28.05.2018
05:52:14
спасибо!

Google
Friedrich
28.05.2018
06:28:30
Там if нельзя поставить?
Да можно, наверное.

Vasily
28.05.2018
06:28:56
Зачем иф когда можно опшн с исключением

Или резалт , что кошернее

Roman
28.05.2018
07:36:16
Или резалт , что кошернее
Да просто option. Тут же только одна возможная ошибка - что тип не является DU. Если я не путаю

Vasily
28.05.2018
07:40:15
Он ещё случайно может быть енамом

Evgeniy
28.05.2018
08:37:13
Он ещё случайно может быть енамом
Enum упадет с тем же исключением.

Dmitry
28.05.2018
14:55:59
Люди, привет. А есть что актуальное по связке Mongo+F# с нетривиальнымми штуками (типа аггрегатные запросы и прочие хитрые фильтры)?

Vasily
28.05.2018
15:58:30
Попробовал я тут лайтдб сунуть внутрь мейлбокса...

Не работает :(

Хотя ещё повнимательнее гляну, там вообще странное поведение

Dmitry
28.05.2018
16:09:25
Ещё вопрос - а какое встраиваемое key-val хранилище в .NET есть (и чтоб с F# красиво могло)? типа как в Go есть BoltDB

Klei
28.05.2018
17:27:30
Попробовал я тут лайтдб сунуть внутрь мейлбокса...
Случайно let! и do! не юзал на асинхронных операциях?

Evgeniy
28.05.2018
18:54:58
Мемы. https://twitter.com/kot_2010/status/1001153071085445120

Vasily
28.05.2018
20:03:56
Случайно let! и do! не юзал на асинхронных операциях?
Да нет.Простой let внутри. Должен возвращать none,возвращает null

Причем в дебаге смотрю,ну none же.В мейлбокс реплай ченнел же улетает null

В общем, магия какая-то

Evgeniy
28.05.2018
20:17:02
Без кода тебя все равно никто не поймет.

Vasily
28.05.2018
20:20:00
Ну ща до дома доеду,постараюсь воспроизвести

Google
Vasily
28.05.2018
21:08:53
https://pastebin.com/sELZxTqA

ЛОвите

Вот я фиг знает, как такое поведение трактовать

Aleksander
28.05.2018
21:25:29
Vasily
28.05.2018
21:39:57
В дебаге

Aleksander
28.05.2018
21:41:14
а попробуй поставить в конце такое: printfn <| match a with | Some _ -> "Some" | None -> "None"

Vasily
28.05.2018
21:42:29
Проблема в том,что в reply null идёт

Функция вроде нормально отрабатывает

Aleksander
28.05.2018
21:42:52
ты попробовал?

Vasily
28.05.2018
21:44:12
Минуту

Очень странно

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