
Vasily
21.04.2017
08:14:09
С помощью SqlCommandProvider
Если писать руками , то у нас две точки входа - sql - файлы плюс обертка на каждый
Если же обертку генерить стандартно, то точкой входа и источником генерации является SQL, подложенный в конкретную папочку
Или дерево папок

Google

Pavel
21.04.2017
08:16:05
Ну напиши батник, который тебе F#-код сгенерит

Дед Пегас
21.04.2017
08:16:16
Лущ powershell.

Vasily
21.04.2017
08:16:27
Батник мне тут не особо поможет
Потому как нужен compile-time check
Ну и не хочется в билд таргеты батник пихать

Evgeniy
21.04.2017
08:17:13
Vasily Ты хочешь провайдер, который, используя другие провайдеры, будет генерировать типы?

Pavel
21.04.2017
08:17:13

Vasily
21.04.2017
08:17:21

Дед Пегас
21.04.2017
08:17:30

Evgeniy
21.04.2017
08:17:42
Да, это интересно.

Pavel
21.04.2017
08:17:53
Батник, который запускает fsi.exe generate-code.fsx

Vasily
21.04.2017
08:17:55

Evgeniy
21.04.2017
08:18:05
Ага.

Google

Vasily
21.04.2017
08:18:11
С помощью других type-providers

Pavel
21.04.2017
08:18:24
СЛОЖНА, я бы кодогенерил.

Vasily
21.04.2017
08:18:31
Тогда ORM можно смело выкидывать нах

Evgeniy
21.04.2017
08:19:04
Сторонняя кодогенерация -- это не очень удобно, я думаю.

Vlad
21.04.2017
08:19:16
в одной из орм видел T4 для генерации c# классов

Vasily
21.04.2017
08:19:23
Нунах
Это не то

Pavel
21.04.2017
08:19:33
почему сторонняя? .fsx лежит в этом же проекте, genereate-code.fsx запускается в pre-build скрипте

Evgeniy
21.04.2017
08:19:50
Это все поддерживать надо. :)

Pavel
21.04.2017
08:19:57
Я просто не знаю, насколько классно у тебя получится из тайп-провайдера генерить типы, которые юзают другие тайп-провайдеры

Vasily
21.04.2017
08:19:57
Во-во

Pavel
21.04.2017
08:20:08
А type-provider написать типа проще?

Evgeniy
21.04.2017
08:20:17
Ну, это несложно.
Надо попробовать!

Pavel
21.04.2017
08:20:24
Ну ты писал, да?

Vasily
21.04.2017
08:20:25

Evgeniy
21.04.2017
08:20:33
@pavelhritonenko Да, писал.

Vasily
21.04.2017
08:20:39
Дальше - забота компилятора

Pavel
21.04.2017
08:20:55
И что, можно отдавать методы, в которых другие тайп-провайдеры используются?

Google

Pavel
21.04.2017
08:21:07
В смысле можно подобные типы генерить из тайппровайдера?

Evgeniy
21.04.2017
08:21:15
А вот это не знаю. Давайте попробуем?
Доберусь до дома, проведу эксперимент.

Vasily
21.04.2017
08:21:28
Я бы попробовал
http://fsprojects.github.io/FSharp.Data.SqlClient/configuration%20and%20input.html
Раздел Overriding connection string at run-time
В т.ч. поможет

Vlad
21.04.2017
08:23:32
Это...вопрос более приземленный: какой самый правильный способ борьбы с null? А то у меня с isNull лыжи что-то не едут

Vasily
21.04.2017
08:23:37
Some
Точнее Option

Pavel
21.04.2017
08:23:56
Option.ofNull - но будь осторожен, это структура

Vlad
21.04.2017
08:24:11
let nullToOption x =
let result = isNull x
match result with
| true -> None
| _ -> Some(x)
возвращает мне null

Pavel
21.04.2017
08:24:18
В смысле Option - это не структура, поэтому если пол лярда в память положишь, GC будет работать
https://github.com/jack-pappas/ExtCore/blob/42d629bc434248f77c2a8fc663b92167079d071f/ExtCore/Pervasive.fs#L821

Evgeniy
21.04.2017
08:42:56
Vlad @pavelhritonenko Option.ofObj

Pavel
21.04.2017
08:43:12
Это в F# 4.1, да?
Сегодня в паравозе поеду - посмотрю что там нового

Evgeniy
21.04.2017
08:43:50
Вроде нет.

Google

Pavel
21.04.2017
08:43:53
А, даже в 4.0

Evgeniy
21.04.2017
08:43:59
Да, 4.0
В 4.1 добавили вот эти функции.
https://github.com/Microsoft/visualfsharp/pull/1781

Pavel
21.04.2017
08:45:50
Мы 3.1 использовали долго, по привычке ExtCore референшу.

Vlad
21.04.2017
08:53:25
let replyToMessage = Option.ofObj textMessage.ReplyToMessage
replyToMessage : null
это апи телеграма, ReplyToMessage - свойство. не могу найти проблему что-то

Pavel
21.04.2017
08:56:03
Не очень понятно, что ты хочешь

Vlad
21.04.2017
08:57:27
ReplyToMessage может быть null, пытаюсь его обернуть в Option через Option.ofObj
как результат имею не Option, а null
почему - понять пока не могу

Nikolay
21.04.2017
08:59:06

Vlad
21.04.2017
08:59:13
да.

Nikolay
21.04.2017
08:59:25
Эмм, такое разве возможно?

Evgeniy
21.04.2017
08:59:27
Vlad А как проверяешь, что там null?

Friedrich
21.04.2017
08:59:39

Evgeniy
21.04.2017
09:00:51
Vlad Просто, например, None отображается в REPL как <null>. Старая история, кажется @fvnever ишшуй заводил на эту тему.

Friedrich
21.04.2017
09:00:59

Pavel
21.04.2017
09:01:27
Microsoft (R) F# Interactive version 4.1
Copyright (c) Microsoft Corporation. All Rights Reserved.
> let (str: string) = null;;
val str : string = null
> Option.ofObj str;;
val it : string option = None

Evgeniy
21.04.2017
09:02:05
Хм, починили уже? Отлично. :)

Google

Evgeniy
21.04.2017
09:02:12
Давай тогда дальше думать.

Friedrich
21.04.2017
09:02:29
Про отображение там уже был баг, и он только в хитрых случаях так криво отображается.

Evgeniy
21.04.2017
09:03:13
А починили, кажется, только отображение.

Pavel
21.04.2017
09:03:19
> None.GetType();;
System.NullReferenceException: Object reference not set to an instance of an object.
at <StartupCode$FSI_0004>.$FSI_0004.main@()
Stopped due to error

Friedrich
21.04.2017
09:03:22
Кажется, ничего не починили :(

Igor
21.04.2017
09:03:25
Кстати, вот оригинал (вроде не было) полюбившегося видео про "болонхил" ?
Спикер Mark Seemann, тот же что и про "from DI to Dep. rejection"
https://youtu.be/US8QG9I1XW0

Vlad
21.04.2017
09:03:38

Evgeniy
21.04.2017
09:03:50
Vlad Не, это фигня. :)

Pavel
21.04.2017
09:03:56
<null> - это None

Evgeniy
21.04.2017
09:03:59
Там None.

Vlad
21.04.2017
09:04:03
кхм.

Evgeniy
21.04.2017
09:04:04
Верь нам.

Pavel
21.04.2017
09:04:30
> sprintf "%A" None;;
val it : string = "<null>"

Friedrich
21.04.2017
09:05:13

Igor
21.04.2017
09:06:41

Evgeniy
21.04.2017
09:09:03
Кстати, папир про дженерики в .Net -- это 2001 год.
С примерами на C#.
Самые ранние упоминания об F#, которые я находил, это 2002 год.