
Evgeniy
25.05.2017
06:41:56
Люди, которые пилили Power Tools, просто пилят поддержку F# в VS.
@Dolfik Поставь VF# Nightly, чтобы иметь свежие фичи и исправления.

Friedrich
25.05.2017
06:43:08

Nikolay
25.05.2017
06:43:39
Ну так powertools это же вроде не только дополнение к IDE, а там ещё библиотеки были?

Google

Evgeniy
25.05.2017
06:43:58
Какие библиотеки?

Nikolay
25.05.2017
06:58:45
А, это power pack

Evgeniy
25.05.2017
07:00:08
@Dolfik https://github.com/fsprojects/powerpack-archive

Igor
25.05.2017
07:10:54
А Fable совместим с .net core 2.0 preview 1?

Pawel
25.05.2017
07:43:14
Вот блин всю жизнь пользовался самописным сериализатором json, а тут понадобилось оптимизировать. Оказалось хвалёный Json.NET ни фига не умеет в F# из коробки не смотря на все уверения

Vasily
25.05.2017
07:43:50
Есть chiron
Но на него нет документации толком

Pawel
25.05.2017
07:44:30
это в котором надо каждую пропертю каждого класса отдельно прописывать? нафиг нафиг

Friedrich
25.05.2017
07:45:06

Vasily
25.05.2017
07:46:14
Ну с сериализацией в json и вообще сериализацией траблы

Pawel
25.05.2017
07:46:29

Vasily
25.05.2017
07:46:33
Когда надо сериализовать немного не в те названия полей/значения

Friedrich
25.05.2017
07:46:34

Google

Pawel
25.05.2017
07:46:47

Friedrich
25.05.2017
07:47:01

Astmatik
25.05.2017
07:47:05

Vasily
25.05.2017
07:47:20
Но почему?
Ну тут обычно сталкиваются доменные модели с форматами передачи данных

Pawel
25.05.2017
07:47:29
в хаскелях прописвать ничего не надо, всё компилятором по дефолту выводится

Vasily
25.05.2017
07:47:43
В доменной модели мне удобнее данные в одной форме представлять, при сериализации в другой

Pawel
25.05.2017
07:48:12

Vasily
25.05.2017
07:48:30
В JSon.net работает вроде
С помощью атрибутов
Хотя в теории должно быть что-то вроде
'a-?'a->'b)->string

Pawel
25.05.2017
07:49:37
В итоге у меня заработало на FsPickler. Вот кстати очень годная либа во всех отношениях

Astmatik
25.05.2017
07:49:52
Че-то я не понимаю, как в F# может не работать что-то, что работает в C#. И фраза про собственный сериализатор криворукостью попахивает.

Vasily
25.05.2017
07:50:07
Кстати, по пиклеру есть годная документация
?
По кастомным преобразованиям

Friedrich
25.05.2017
07:50:19

Pawel
25.05.2017
07:50:30

Friedrich
25.05.2017
07:51:24
Господа, нубизмы и ламерства — в привате, пожалуйста (и про криворукость).

Vasily
25.05.2017
07:51:28
Давайте без переходов на личности

Google

Astmatik
25.05.2017
07:51:57
мы пока не про личности, а про фразы друг друга )

Vasily
25.05.2017
07:52:53
В приват, в приват

Astmatik
25.05.2017
07:55:02
На хабре был эпичный топик про то, как чувак написал собственный json сериализатор. Он недолго прожил, жаль, что не сохранил.

Pawel
25.05.2017
07:57:36
если работает, то совершенно по фигу какой сериализатор. вообще фиолетово

Igor
25.05.2017
08:02:50
Обычные рекорды (и вложенные) Newtonsoft.Json нормально переваривает в .net core, использую и все ок.

Nikolay
25.05.2017
08:03:00
Зачем в записях сделали option типы обязательными для заполнения?

Igor
25.05.2017
08:03:35

Nikolay
25.05.2017
08:03:57
Даже Json Provider юзает DU

Igor
25.05.2017
08:04:34

Nikolay
25.05.2017
08:05:15

Pawel
25.05.2017
08:05:35

Nikolay
25.05.2017
08:05:57
NullValueHandling = NullValueHandling.Ignore

Pawel
25.05.2017
08:06:45

Nikolay
25.05.2017
08:07:23
И он умеет в snake_case, camelCase, PascalCase?

Pawel
25.05.2017
08:08:09

Google

Nikolay
25.05.2017
08:08:55
Ну тогда под .Net Core не умеет)

Igor
25.05.2017
08:08:57
Это обычный ответ Telegram Bot API
А вот формально, как отличить одно от другого?
Типа спарсилось в число - значит число, нет строка. Как-то это не формализированно звучит.
Я бы как строку использовал везде, хотя это конечно косяк телеграмма, который даже в C# библиотеки пролазит.

Pawel
25.05.2017
08:11:38

Roman
25.05.2017
08:13:55

Igor
25.05.2017
08:14:41

Nikolay
25.05.2017
08:14:57
Вот подскажите, как быть. Использовал такой record:
type User struct
{
Id: int
...
LastName: string option
...
}
У телеграма изменилось апи, добавился ещё один опциональный тип:
LanguageCode: string option
Беда в том, что если я сейчас добавил бы его в рекорд, то сломал бы совместимость с библиотекой у других людей, ибо рекорд стал бы требовать инициализации поля LanguageCode, если где-то он использовался.
Вопрос в том, как заранее продумать такую вещь?

Roman
25.05.2017
08:15:21

Pawel
25.05.2017
08:19:04
Вот подскажите, как быть. Использовал такой record:
type User struct
{
Id: int
...
LastName: string option
...
}
У телеграма изменилось апи, добавился ещё один опциональный тип:
LanguageCode: string option
Беда в том, что если я сейчас добавил бы его в рекорд, то сломал бы совместимость с библиотекой у других людей, ибо рекорд стал бы требовать инициализации поля LanguageCode, если где-то он использовался.
Вопрос в том, как заранее продумать такую вещь?
== рекорд стал бы требовать инициализации поля LanguageCode, если где-то он использовался.
это зависит от того, как будет реализована функция, создающая рекорд, какие параметры она принимает на вход. Апи должен предоставоять разумное дефолтное значение рекорда, и проблем не будет

Roman
25.05.2017
08:20:14

Admin
ERROR: S client not available

Nikolay
25.05.2017
08:21:53

Pawel
25.05.2017
08:23:16
запрещать не обязательно, достаточно сделать функцию, которая упростит для юзера создание рекорда, чтобы так не делать, ибо это не удобно и букв много
либо использовать свои структуры данных для взаимодействия с кодом пользователя

Roman
25.05.2017
08:33:06

Roman
25.05.2017
08:33:49
Странно, у меня с Json.Net никогда проблем не было. По мне так это самая лучшая либа для джейсона. С фшарпом дружит на ура. Никаких дополнительных настроек. А в чем конкретно проблема была?

Nikolay
25.05.2017
08:33:49

Igor
25.05.2017
08:35:00

Roman
25.05.2017
08:36:27
или если хочется рекордов, то
type MyRecordType =
private { Id : int; Username : string; LastName : string option }
with member val Username = Username with get,set
member val Lastname = //тут переопределить получение и присваивание и сериализатор может работать

Google

Pawel
25.05.2017
08:38:33
Да по фигу кто-там что подумает. Писать как душе угодно в любом случае не надо, а надо - правильно.
Посмотри, как сделали конфиг Suave - дефолтная константа. Если надо какое-то поле переопределить, пишем что-то типа {defaultconfig with IP = otherValue}, ни кто не жалуется

Roman
25.05.2017
08:39:19
Ну так он запутался где какой Username а где какой Lastname.

Pawel
25.05.2017
08:39:22

Roman
25.05.2017
08:40:31
DU поддерживаются. Он их в Case с Field поля сериализует по умолчанию

Nikolay
25.05.2017
08:41:20
А в записях нельзя указать значение по умолчанию?
Если можно, я буду просто счастлив

Pawel
25.05.2017
08:41:48
опять всем гошечки не хватает))
не, нельзя))
надо самому определить дефолтное значение для твоего типа

Igor
25.05.2017
08:42:26

Roman
25.05.2017
08:42:31
Да
У меня на работе это активно используется

Nikolay
25.05.2017
08:42:50
Меня прям расстраивают некоторые моменты в F# :(

Roman
25.05.2017
08:43:50
Я из дома могу пример jsona написать получаемого.

Roman
25.05.2017
08:43:57

Nikolay
25.05.2017
08:44:08

Roman
25.05.2017
08:44:42
Система тестирования
Весь сервер сайд на фшарпе

Friedrich
25.05.2017
08:45:42

Pawel
25.05.2017
08:46:37

Roman
25.05.2017
08:48:45
Оно компилится в поля. А не в свойства. Зато на свойства можно повесить кастомную логику, т.е. Сделать обертку для сирализатора. Типа если у тебя рекорд с DU, оборачиваешь его в подобный тип, и выставляешься пропетом которые убирают все du