
Roman
24.05.2017
08:40:00
Напишу его родиетелям issue

Vasily
24.05.2017
08:50:57
Тут не только проблема с ProvidedLiteralField
Нельзя породить type provider внутри type provider
Точнее, я бы сделал что-то вроде пайплайна

Google

Evgeniy
24.05.2017
08:52:30
Vasily Ну, у @neftedollar задача попроще. :)

Vasily
24.05.2017
08:52:32
В итоге сценарий, например, генерации типов для sql команд пока делается только пребилд скриптами
Ну у него да, проще
И решается подменой строки в рантайме
Я же размышляю над более глобальной темой
И пока выглядит как макросы
Т.е. в общем случае задача выглядит как кодогенерация без кодогенерации

Roman
24.05.2017
08:56:03

Alexey
24.05.2017
08:59:32
У меня был кейс, когда я через EnumProvider генерировал тексты запросов, которые потом вставлял в CommandProvider

Vasily
24.05.2017
09:28:50
А как генерил экземпляры провайдеров?
Кстати, коллеги, кто как сериализацию в json настраивает?
Из рекорд тайпов

Roman
24.05.2017
10:03:34

Google

Roman
24.05.2017
10:04:39
Сериализуются

Vasily
24.05.2017
10:05:06
Интересует кейс, когда названия пропертей отличаются
Есть Chiron, конечно
Он вроде позволяет разнести параметры сериализации и объявление типов

Evgeniy
24.05.2017
10:10:52
Занятно. Оказывается, если в DU меньше четырех кейсов, то они матчатся через RTTI, иначе — с помощью введения целочисленного тега.

Roman
24.05.2017
10:14:49
В ньютонсофт есть атрибуты

Artemy
24.05.2017
10:15:36

Vasily
24.05.2017
10:16:36
Не, ну понятно, что можно навесить JSonProperty и типа все ок

Летучая
24.05.2017
10:16:50
Да
Так делаю

Vasily
24.05.2017
10:17:00
Но это какая-то императивщина

Roman
24.05.2017
10:32:43
Вам шашечки или ехать? )))

Vasily
24.05.2017
10:33:37
Ехать, но с шашечками. Я пытаюсь исследовать реальный кейс - api к стороннему серверу

Pawel
24.05.2017
10:35:16

Evgeniy
24.05.2017
10:35:27
@ruzzke_mir is

Pawel
24.05.2017
10:35:51
да, это и есть приведение к базовому типу
Иеются в виду DU со [<Struct>] или обычные?

Evgeniy
24.05.2017
10:36:35
Обычные.

Roman
24.05.2017
10:42:01

Pawel
24.05.2017
10:46:29

Google

Pawel
24.05.2017
11:02:16

Evgeniy
24.05.2017
11:03:03
Видимо, чтобы не тащить лишний int в маленькие DU.

Pawel
24.05.2017
11:03:58
так вроде инты сравнивать дешевле чем приводить кбазовому типу

Evgeniy
24.05.2017
11:04:06
Да.
Или скорость, или память. Как обычно.

Летучая
24.05.2017
11:05:51
Ничоси сколько кода компилер генерит
???

Evgeniy
24.05.2017
11:09:54
@ruzzke_mir Есть еще альтернативный вариант, через виртуальный тег.
https://github.com/Microsoft/visualfsharp/pull/1517

Nikolay
24.05.2017
11:11:26
Библиотекой для апи телеги интересуются
Мне даже как-то не по себе, из-за того, что пока не пилю её

Pawel
24.05.2017
11:17:23

Roman
24.05.2017
13:16:22

Nikolay
24.05.2017
13:18:44
Да и времени пока не особо много

Roman
24.05.2017
13:20:07

Nikolay
24.05.2017
13:21:22
Работает?
Я не доволен в целом, что получается
Это стрёмно же:
static member internal GetUpdatesBaseAsync (token: string, offset: int64 option, limit: int option, timeout: int option) =
Telegram.MakeRequestAsync<Types.Update>
( token,
"getUpdates",
[ "offset", Helpers.toString offset
"limit", Helpers.toString limit
"timeout", Helpers.toString timeout ])
/// Receive incoming updates using long polling
static member GetUpdatesAsync token offset limit timeout =
Telegram.GetUpdatesBaseAsync(token, offset, limit, timeout)

Roman
24.05.2017
14:07:15
хочу описать ф-цию которая бы возвращала бы каррированную версию себя же, и эту версию бы тоже можно было вызывать, но судя по всему это не возможно, т.к. тип функции получается бесконечным 'a-> (`a -> ( ... -> `b) это забавно)

Friedrich
24.05.2017
14:27:42

Google

Evgeniy
24.05.2017
15:58:15
@neftedollar Ничего не понял. Можно на примере?

Roman
24.05.2017
16:00:24
Ожидаемое поведение
let counter = myFun 0
counter "lol" //times 1
counter "looool" //times 2

Friedrich
24.05.2017
16:03:59
Не, совсем не просто.
Но я не смог вспомнить, где видел этот пример :(

Roman
24.05.2017
16:05:46
вот тип myFun int -> 'a -> 'b , но 'b не может обобщиться в 'b = 'c -> 'd

Admin
ERROR: S client not available

Roman
24.05.2017
16:06:31
а еще точнее в 'b = 'a -> 'b
рекурсивный тип )
@angmarr в хаскелле можно описать функцию типа A где A = B -> A?

Evgeniy
24.05.2017
16:13:12
@neftedollar Ты хочешь странного.

Roman
24.05.2017
16:13:33

Evgeniy
24.05.2017
16:18:34
@fvnever @neftedollar На инлайнах что-то такое городить смысла мало.
Никакого динамического поведения.
@neftedollar А это у тебя какая-то практическая задача? Или проверка компилятора на прочность?

Roman
24.05.2017
16:19:54
проверка вытекашая из задачи сделать коунтер. Стало интересно можно ли так)

Dmitry
24.05.2017
16:20:16
Когда в руках микроскоп - всё вокруг гвозди. Я вот думаю, а что если на F# писать, думая как в Go?

Google

Roman
24.05.2017
16:20:37

Evgeniy
24.05.2017
16:21:03
@neftedollar Просто обычный-то счетчик делается через общй ref и фабрику.

Roman
24.05.2017
16:21:05
идиотские операторы заменить на computation expressions и он отличный

Evgeniy
24.05.2017
16:21:21
Да, я понял.

Roman
24.05.2017
16:21:54
но в итоге заменил на
let counter msgtype m =
let mutable x = m
let nested msg =
x <- x + 1
printfn "%i - %s" x msgtype
nested

Igor
24.05.2017
16:33:13

Vasily
24.05.2017
16:36:06
Я так понял, номер счетчика у тебя всегда есть
Или там по seq идет?

Nikolay
24.05.2017
16:40:15

Roman
24.05.2017
16:44:39

Nikolay
24.05.2017
16:47:06
Думаю тут лучше знают)
В C# же нет хвостовой рекурсии?

Vasily
24.05.2017
16:47:45
По идее, надо бы сделать CounterStorage,и в твой лог просто передавать функцию, которая возвращает актуальное значение
А внутри стореджа уже мьютебл этц
Потому как следующий уровень задачи - каунтеры по разным тегам

Nikolay
24.05.2017
16:53:12
Должна быть по идее
Не могу нагуглить однозначного ответа. Где-то говорят, что нет, а где-то, что есть, но только в релиз сборке

Vasily
24.05.2017
16:56:08
https://stackoverflow.com/questions/7102520/does-c-sharp-do-tail-recursion
Похоже, что нет

Roman
24.05.2017
16:58:58

Nikolay
24.05.2017
16:58:59
He is right that tall call optimization should be required, though. In fact, CLR supports tail calls exactly for the reason in his Argument 1 (at tne end of the blog). "For CLR 4 the fact that the x64 JIT would sometimes not honor the “tail.” prefix prevented functional languages like F# from being viable. So we worked to improve the x64 JIT so that it could honor the “tail.” prefix all of the time and help make F# a success." blogs.msdn.com/b/clrcodegeneration/archive/2009/05/