@Fsharp_chat

Страница 160 из 772
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 команд пока делается только пребилд скриптами

Ну у него да, проще

И решается подменой строки в рантайме

Я же размышляю над более глобальной темой

И пока выглядит как макросы

Т.е. в общем случае задача выглядит как кодогенерация без кодогенерации

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
Интересует кейс, когда названия пропертей отличаются
Я помню ,что в WebSharper подобное делалось с помощью аттрибута CompiledName (сейчас там уже это другим аттрибутом делается).

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 к стороннему серверу

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
Обычные.

Pawel
24.05.2017
10:46:29
Google
Pawel
24.05.2017
11:02:16
Занятно. Оказывается, если в DU меньше четырех кейсов, то они матчатся через RTTI, иначе — с помощью введения целочисленного тега.
щас глянул дизассемблированный C# - действительно так. https://gist.github.com/fpawel/1ac019d24cdc268c371247fa562be16e ЧуднО))

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
https://github.com/Microsoft/visualfsharp/pull/1517
о, круто будут если он допилит это к моменту выхода 4.2

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) это забавно)

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

Roman
24.05.2017
16:00:24
@neftedollar Ничего не понял. Можно на примере?
let rec myFun acc msg = let newAcc = acc + 1 printfn "times %i" newAcc myFun newAcc

Ожидаемое поведение let counter = myFun 0 counter "lol" //times 1 counter "looool" //times 2

Ожидаемое поведение let counter = myFun 0 counter "lol" //times 1 counter "looool" //times 2
вот ожидаемое поведение let counter = myFun 0 let counter1 = counter "lol" //times 1 let counter2 counter1 "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
@neftedollar Ты хочешь странного.
С одной стороны да) Но это просто выглядит так естественно)

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
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
@angmarr в хаскелле можно описать функцию типа A где A = B -> A?
Если ты об этом: type A b = b -> A то получается ошибка “Cycle in type synonym declarations”

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

Или там по seq идет?

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

Похоже, что нет

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/

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