
Friedrich
17.04.2017
04:30:31
Там фри-монад ещё не хватает.
А вообще-то я вот лично не был бы против, если б человек использовал мои материалы при подготовке своего доклада. Но мог бы и сослаться на тех ребят, у которых позаимствовал идеи.

Evgeniy
17.04.2017
04:41:40
Не, я так.
Просто интересно стало.

Google

Evgeniy
17.04.2017
04:48:08
@fvnever Когда-нибудь я соберусь сделать факультатив про ФП и F#, и тоже буду тырить отовсюду. :)
Кстати, а вы знаете, что Сошников такой онлайн-курс ведет?
https://courses.mipt.ru/course/MIPT/f_sharp/

Friedrich
17.04.2017
04:48:49
Ну ты токо на источники ссылайся.

Evgeniy
17.04.2017
04:49:12
Канеш.
Мы же приличные люди.

Roman
17.04.2017
04:53:39
Лол. "Если хотите чтоб ваш код был красивый и компактный и мало кому понятный, то добро пожаловать на этот курс"

Friedrich
17.04.2017
05:04:39
Ну, хотя бы честно :)

Roman
17.04.2017
05:20:35

Friedrich
17.04.2017
05:21:02
Это же шутка, ну!

Roman
17.04.2017
05:21:18
бессонная ночь.

Летучая
17.04.2017
06:07:21

Google

Vasily
17.04.2017
06:17:18
На хабр не знаю, стоит ли ориентироваться.Очень специфическое сообщество
Вот чего на f# реально не хватает, так это библиотеки интеропа с с#
Ну там преобразование типов,функций,этц.

Evgeniy
17.04.2017
06:19:21
Дык, надо написать.

Friedrich
17.04.2017
06:22:55
А что конкретно нужно? Давайте обсудим.

Vasily
17.04.2017
06:24:16
Тип ->опшн
Func ->func как минимум
Тьфу, fun

Friedrich
17.04.2017
06:25:21
Тип ->опшн
Так ведь просто дописываешь везде Some или Option.ofObj?
Func ->func как минимум
А вот тут интереснее. Для какого примера это нужно? Как-то вообще можно ли снаружи понять, что Func это не fun?

Vasily
17.04.2017
06:25:56

Friedrich
17.04.2017
06:26:13
А ты хочешь имплиситно чтобы?

Vasily
17.04.2017
06:27:11
Хочу имплисит ,да
Для бесшовного интеропа

Evgeniy
17.04.2017
06:28:02
Имплисит. :(

Friedrich
17.04.2017
06:28:03
Это всё имеет смысл, да. Я бы тоже хотел, чтобы эти конверсии имплиситно производились. Во всяком случае, для фунок — точно.
Для Option не совсем понятно, какой вариант должен быть умолчальным.
Ну и, похоже, что это всё за рамки библиотеки выходит. Потому что F# вообще неявных конверсий не любит и не делает их.

Vasily
17.04.2017
06:29:17
В теории option.ofobj с анбоксингом

Google

Evgeniy
17.04.2017
06:35:25
Явные преобразования функций -- это большая проблема?
Ну, надо немного пописать соответствующих интерфейсов и вспомогательных функицй.

Vasily
17.04.2017
06:36:59
Неразрешимых проблем там нет,нет инструментария, чтобы писать соответствующие инструменты типа tofun
Точнее хелперов

Nikolay
17.04.2017
07:08:53
А мне вот опять же не хватает нормального доступа к БД из F# Core

Vasily
17.04.2017
07:09:24
Ну это тоже можно написать
Как обертку над ADO.Net

Nikolay
17.04.2017
07:09:40
Конечно есть EF Core, но он кривоват пока
Мне бы хотелось что-нибудь типа Dapper + Slapper

Friedrich
17.04.2017
07:10:28
Так а кто мешает взять и заюзать Dapper?

Nikolay
17.04.2017
07:10:30
Но я пока слишком нуб в F# чтобы писать такое

Friedrich
17.04.2017
07:10:34
А :)

Nikolay
17.04.2017
07:11:17
Как-то не функциональненько получается с Dapper'ом

Friedrich
17.04.2017
07:11:30

Nikolay
17.04.2017
07:12:13
Да это понятно, но приходится обёртки делать над ними
И вместо того, чтобы писать полезные вещи, ты пишешь сраные обёртки)
Вчера полдня потратил, чтобы запросы к БД сделать через Dapper, и то не допилил толком обработку джоинов :) Это конечно по большей степени моя проблема в незнании F#, хотя благодаря этому узнал несколько интересных фишек, но блин, человеку начинающему изучать F# это не очень понравится, и он вполне может забросить это дело

Friedrich
17.04.2017
07:18:21
Поначалу-то оно в любом деле так!

Nikolay
17.04.2017
07:22:13
Ну как сказать, последний язык который я учил был Go, и он довольно неплохо зашёл, в том числе благодаря классной ORM и вообще богатому функционалу стандартной библиотеки.

Алексей
17.04.2017
07:43:03

Google

Nikolay
17.04.2017
07:48:33

Алексей
17.04.2017
07:48:44
Спасибо

Nikolay
17.04.2017
07:50:13
Но это я думаю такой себе код)

Алексей
17.04.2017
07:50:54
мне вообще принцип интересен подключения
а вообще никто не пробовал подключать либы написанные на f# к основному большому проекту на c#?

Vasily
17.04.2017
07:51:41
Ну я пробовал в свое время

Алексей
17.04.2017
07:51:56
Коллеги сильно били?

Vasily
17.04.2017
07:52:06
До продакшна не дошло

Nikolay
17.04.2017
07:52:29
А F# кортежи в C# это Tuple<>?

Vasily
17.04.2017
07:52:35
В целом, довольно сложно объяснить, зачем это нужно

Алексей
17.04.2017
07:52:36
угу

Nikolay
17.04.2017
07:54:29
И в F# кортеже получается тоже максимум 7 значений может быть? (не считая вложенных кортежей)

Roman
17.04.2017
07:59:04

Nikolay
17.04.2017
07:59:40
У меня группировка по 9 полям была?

Igor
17.04.2017
08:00:32

Алексей
17.04.2017
08:00:39
а кто-то пытался подружить крипто-про и f# ?

Nikolay
17.04.2017
08:01:41

Friedrich
17.04.2017
08:03:59

Igor
17.04.2017
08:04:24

Google

Nikolay
17.04.2017
08:05:14
Щас, я только скопировал код, и свет в офисе отрубился

Vasily
17.04.2017
08:05:24
Жесть какая

Алексей
17.04.2017
08:05:34

Igor
17.04.2017
08:05:35

Nikolay
17.04.2017
08:06:06

Friedrich
17.04.2017
08:07:15
Вообще, как правильно писать идиоматичный SQL на F# — я пока для себя не понял.
Ну то есть явно хочется тайп-провайдер поюзать. Прям жжотся.

Vasily
17.04.2017
08:07:45
Ну я бы квотейшны попробовал на самом деле

Friedrich
17.04.2017
08:07:47
Но какой порядок работы должен быть при использовании миграций и тайп-провайдеров – я пока не понял.

Vasily
17.04.2017
08:07:54
Они там прям ок зайдут

Nikolay
17.04.2017
08:10:06
var grouped = materials.GroupBy((f =>
new Tuple<int, string, Tuple<string, string, int?>, string, string, string, decimal>(
f.P_MNT_PLACE.ID_MNT_PLACE,
f.P_PIPMTR.P_IMPMTR.P_CLSMTR.P_MATRNM.SHORT_MATERIAL_NAME,
new Tuple<string, string, int?>(f.P_PIPMTR.P_IMPMTR.P_SZMATR.NAME_SIZE, f.P_PIPMTR.P_IMPMTR.P_MTR_PRESSURE?.VALUE_TEXT, f.P_PIPMTR.P_IMPMTR.P_MTR_PRESSURE?.ID_MTR_PRESSURE_MSNT),
string.Join(", ", f.P_PIPMTR.P_IMPMTR.P_CLSMTR.P_STMTR.OrderBy(k => k.P_GOST.GOST_OST_TU_NAME).Select(k => k.P_GOST.GOST_OST_TU_NAME)),
string.Join(", ", f.P_PIPMTR.P_IMPMTR.P_CLSMTR.P_CLSMTR_GNRC.OrderBy(k => k.P_GENERC.P_MARKGN.NAME_PRESSMARK).Select(k => k.P_GENERC.P_MARKGN.NAME_PRESSMARK)),
f.P_PIPMTR.P_IMPMTR.P_CLSMTR.P_TPMSNT.TYPE_UNIT_MEASUR_NAME,
f.P_PIPMTR.P_IMPMTR.MASS_ED)));
Вот такая дичь :D

Roman
17.04.2017
08:10:28

Nikolay
17.04.2017
08:10:52
На дурацкие названия полей внимания не обращайте)

Friedrich
17.04.2017
08:11:17
> new Tuple<int, string, Tuple<string, string, int?>, string, string, string, decimal>
Попробуйте Tuple.Create :)

Nikolay
17.04.2017
08:11:34
Оракл не умеет в нормальные названия, онли Upper case и 30 символов максимум

Friedrich
17.04.2017
08:12:20
Вообще, тупля с туплями — это мощно, внушает :)

Nikolay
17.04.2017
08:12:56
Программируем как умеем)

Friedrich
17.04.2017
08:13:32
О, кстати, там бы анонимные типы хорошо зашли.
Всяко лучше, чем тупля туплей.