
Nikolay
19.05.2017
09:16:31

Pawel
19.05.2017
09:16:44
printf "%s" a

Nikolay
19.05.2017
09:16:51
Блин, точно)

Pawel
19.05.2017
09:18:17

Google

Friedrich
19.05.2017
09:19:40
Ну так это делается с iqueryable оч хорошо.
Неа, не делается. Вот пример (на C#):
Expression<Func<User, bool>> a, b ,c;
Users.AsQueryable().Where(u => a(u) && b(u) && c(u)); // не скомпилируется: у Expression<T> нет оператора круглых скобок

Roman
19.05.2017
09:20:18

Friedrich
19.05.2017
09:20:25

Roman
19.05.2017
09:21:14

Friedrich
19.05.2017
09:21:31

Roman
19.05.2017
09:21:33
А так блин

Friedrich
19.05.2017
09:22:17
Ты что-то не то делаешь
Я делаю то, что всегда делаю: пишу программу, вынося кусочки (частично применённые функции и что угодно ещё) в переменные. Да, с SQL оно так просто не работает. Нет, ограничение это не фундаментальное, и его можно решить.

Roman
19.05.2017
09:22:44
Я про код

Friedrich
19.05.2017
09:22:51
Решается ли это в рамках текущих или будущих технологий F#, и такая ли уж это нужная фича — вопрос дискуссионный.
Мне на каждом проекте приходится решать эти вот проблемы программируемых запросов. Где-то более успешно, где-то менее. Кое-где даже строки конкатенируем, и это ужас-ужас :)
Для EF и System.Linq.Expressions я себе решение наколдовал, кстати, но оно мне не очень нравится — в промышленных масштабах не поиспользуешь. Если бы F#, например, давал возможность типобезопасно композировать кусочки запросов, то на .NET-стеке это бы точно было киллер-фичей для некоторых проектов.

Google

Friedrich
19.05.2017
09:26:25
(и у меня нет уверенности, что сделать такое на сегодняшнем F# невозможно — можно и попробовать)

Pawel
19.05.2017
09:26:53

Roman
19.05.2017
09:27:19

Pawel
19.05.2017
09:28:00
здесь пример как трансформировать вручную :
http://stackoverflow.com/questions/42583018/sqlprovider-recursively-composing-queries

Friedrich
19.05.2017
09:28:06

Roman
19.05.2017
09:29:13

Friedrich
19.05.2017
09:30:52

Pawel
19.05.2017
09:31:55

Friedrich
19.05.2017
09:32:16

Roman
19.05.2017
09:32:37
Это решается. Я буду к компа напишу.

Friedrich
19.05.2017
09:33:08
Мне и правда интересно, как другие предложат её решить, в особенности с помощью SQLProvider, с которым я не очень хорошо знаком.

Artemy
19.05.2017
09:33:17
@fvnever а как насчёт этого:
http://fsprojects.github.io/FSharp.Linq.ComposableQuery/ ?
Правда, лично пока ещё не пробовал.

Friedrich
19.05.2017
09:35:02

Artemy
19.05.2017
09:35:45
Странно только ,что относительно долго не обновляется.

Friedrich
19.05.2017
09:37:02
Предположу, что мало кому нужны настолько сложные запросы, поэтому пользователей мало, и поток issues тоже небольшой.

Roman
19.05.2017
09:37:22
Например

Artemy
19.05.2017
09:38:09

Friedrich
19.05.2017
09:38:50

Google

Roman
19.05.2017
09:41:39
@Dolfik телеграм обновил API)

Nikolay
19.05.2017
09:41:53
Пока блин времени нет заниматься библиотекой :(

Roman
19.05.2017
09:42:35
Нуок

Evgeniy
19.05.2017
09:46:25
Artemy @fvnever А ведь про ComposableQuery как раз в том видео с Вадлером говорится. :)

Friedrich
19.05.2017
09:46:47
Ок, я эту библиотечку посмотрю.

k0balt
19.05.2017
09:49:33
а нельзя что-то типа a(b(c(Users))), где a, b, c эти users.Where(u => u.Id != Guid.Empty) ?

Friedrich
19.05.2017
09:49:53

Evgeniy
19.05.2017
09:50:09
@fvnever И видео!

Friedrich
19.05.2017
09:50:11
Если хочется a || b || c — тогда уже фейл.

k0balt
19.05.2017
09:50:27
а, ну да

Artemy
19.05.2017
09:52:47
@gsomix да, действительно. Спасибо за видео, схоронил. :)

Nikolay
19.05.2017
10:00:04
При запуске F# аппы:
System.TypeInitializationException was unhandled
Message: An unhandled exception of type 'System.TypeInitializationException' occurred in DumpsDownloader.exe
Additional information: Инициализатор типа "<StartupCode$DumpsDownloader>.$Program" выдал исключение.

Friedrich
19.05.2017
10:04:15
А какое исключение-то? :)

Igor
19.05.2017
10:06:30
А напомните почему в F# нет “Optional function arguments”?
Сейчас узнал что они есть в OCaml и SML
Кстати, прикольное сравнение языков http://adam.chlipala.net/mlcomp/

Evgeniy
19.05.2017
10:07:58
@angmarr
> We decided against this in F# 2.0/3.0. There were good reasons for this: among other things, the OCaml syntax is unwieldy when there is a fair amount of object/member programming going on as well.
Это про named arguments, но optional там рядом.
@angmarr В SML же тоже нету.

Igor
19.05.2017
10:14:07

Nikolay
19.05.2017
10:16:12

Google

Friedrich
19.05.2017
10:16:34

Nikolay
19.05.2017
10:19:18
Settings.Load("settings.json")
Из за этого
type Settings = JsonProvider<"""
{
"dumpsPathOnServer":"/home/dumps",
"saveToLocal":"C:/db-dumps",
"serverAddress": "localhost",
"serverPort":22,
"serverLogin":"root",
"serverPassword":"password"
} """>
Или Settings.Load это не загрузка из JSON файла, а что-то другое?)
Не пойму, как с помощью Json Provider'a распарсить файл. Если файл до запуска существует, то всё ок, иначе падает

Artemy
19.05.2017
11:39:55
Падает, если файла не существует даже во время компиляции?

Nikolay
19.05.2017
11:40:53

Admin
ERROR: S client not available

Evgeniy
19.05.2017
11:41:07
@Dolfik Справку по Load читал?

Nikolay
19.05.2017
11:41:10
После запуска, но до выполнения кода

Artemy
19.05.2017
11:42:51
Я так понимаю, оно и должно просто парсить файл.
Непонятно, как оно определяет существование файла до того, как этот код сработает.

Nikolay
19.05.2017
11:43:22
А как быть, если файла нет?
У меня перед этим кодом стоит проверка, если файла нет, он создаётся

Artemy
19.05.2017
11:43:46
Ну он ведь есть к тому моменту, когда Load вызывается?

Nikolay
19.05.2017
11:43:49
Но не прокатывает)

Google

Evgeniy
19.05.2017
11:44:08
@Dolfik Ты уверен, что он создается там, где надо?

Nikolay
19.05.2017
11:44:21

Evgeniy
19.05.2017
11:44:27
Можешь поставить бряк до Load?

Nikolay
19.05.2017
11:44:36

Artemy
19.05.2017
11:44:44
@Dolfik, точно создаётся?

Nikolay
19.05.2017
11:44:49
Вообще даже на первую строчку кода не попадает
Короче, это странно немного

Artemy
19.05.2017
11:46:43
Ну, чисто логически: как можно узнать о том, что файла нет до того, как осуществляется запрос к нему?
Так что, видимо, файла просто нету к моменту вызова Load

Evgeniy
19.05.2017
11:47:16
http://stackoverflow.com/questions/33630308/f-xml-provider-system-typeinitializationexception-when-writing
@Dolfik Проверь еще раз пути, и все такое.
И покажи, пожалуйста, код целиком.
Кажется, у тебя с отладкой проблема из-за того, что ты загрузку пытаешься в значение на уровне модуля запихнуть.
А это происходит при инициализации класса. Помнишь, что модули компилируются в классы?

Nikolay
19.05.2017
12:00:09
Блин, ошибка в другом была)
Щас покажу интересную штуку
type Settings = JsonProvider<""" { "test":"test" } """>
let notUsed = Settings.GetSample().JsonValue.AsString()
[<EntryPoint>]
let main argv =
printf "Application started.\nParsing settings..."
0 // return an integer exit code
При запуске получаешь System.TypeInitializationException
Пока не закомментишь строку let notUsed = ...
втф?

Evgeniy
19.05.2017
12:03:58
Ошибка во время инициализации класса.
Сделай из notUsed функцию и вызови в main.

Nikolay
19.05.2017
12:05:18
Блин, точно, я идиот :D