
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

Google

Evgeniy
27.05.2018
06:58:12

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

Evgeniy
27.05.2018
07:24:22

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

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) = ...

Friedrich
27.05.2018
09:41:16

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
спасибо!

Roman
28.05.2018
06:27:45

Google

Friedrich
28.05.2018
06:28:30

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

Roman
28.05.2018
07:36:16

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

Evgeniy
28.05.2018
08:37:13

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

Roman
28.05.2018
15:05:43

Vasily
28.05.2018
15:58:30
Попробовал я тут лайтдб сунуть внутрь мейлбокса...
Не работает :(
Хотя ещё повнимательнее гляну, там вообще странное поведение

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

Evgeniy
28.05.2018
17:07:12

Klei
28.05.2018
17:27:30

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

Vasily
28.05.2018
20:03:56
Причем в дебаге смотрю,ну 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
Минуту
Очень странно