@Fsharp_chat

Страница 187 из 772
Aleksander
01.06.2017
08:45:28
как декларативщина, скорее :)

Artemy
01.06.2017
08:45:52
Ну так-то можно ещё вызывать методы из query, как у Seq, если очень хочется |> использовать.

Но оно, вроде, не лучше выглядеть будет.

Google
Friedrich
01.06.2017
08:46:51
Ну так-то можно ещё вызывать методы из query, как у Seq, если очень хочется |> использовать.
А какой там модуль для вызова этих методов? Вроде как нет такого.

Anton
01.06.2017
08:46:53
какой-то sql получается )

Artemy
01.06.2017
08:47:12
Ну так SQL - чистая декларативщина

Насколько я понимаю

Anton
01.06.2017
08:47:39
эх

Anton
01.06.2017
08:47:49
а мне всё же ближе к сердцу |>

Artemy
01.06.2017
08:48:10
Типа query.Take

Friedrich
01.06.2017
08:48:11
Прямо из query
Например? db.Files |> query.map (??)

Artemy
01.06.2017
08:48:34
Вроде

Но я не пробовал

Friedrich
01.06.2017
08:48:40
Самое близкое, что мне приходит в голову: придётся самому приводить к IQueryable<T> и через точку вызывать LINQ-методы. При этом F#-лямбды и квотейшены туда не засунуть нельзя; их придётся компилировать в Expression<Func<T>>. Короче, та ещё веселуха.

Artemy
01.06.2017
08:48:51
Там Linq.QuerySource<...> передаётся

Google
Artemy
01.06.2017
08:52:18
В общем, это то, что навряд ли предназначено для прямого использования

Так что лучше не извращаться и использовать query-expressions.

Хотя да, можно модуль-обёртку написать.

Anton
01.06.2017
08:53:50
вот так намутил ` query { for file in db.Files do select file take 10 } |> Seq.toList |> List.iter (fun i -> printfn "%A" i.Id)`

Artemy
01.06.2017
08:54:04
Да, так и надо

Вообще, select file можно опустить

Vasily
01.06.2017
08:54:38
Проще сразу Seq.iter

Artemy
01.06.2017
08:54:44
query { for file in db.Files do take 10 }

Vasily
01.06.2017
08:54:46
Без приведения к листу

Там и так будет материализация, походу

Anton
01.06.2017
08:55:57
ну можно и просто Seq.iter, да.

Vasily
01.06.2017
08:56:39
причем можно Seq.iter printfn "%A"

Хотя не, ты же Id берешь

Anton
01.06.2017
08:59:33
угу

поинтфри нотация тут не выйдет

Dmitriy
01.06.2017
09:00:49
@SherievAkhmed ?
@DmitriyVlasov

Aleksander
01.06.2017
09:02:28
Вообще, select file можно опустить
если надо только метаданные напечатать, а сам файл не нужен, то наверное лучше в select'е указать нужные поля, чтобы не тащить из базы тяжелый blob

Artemy
01.06.2017
09:03:24
Ну я для конкретного случая имел в виду

Vasily
01.06.2017
09:18:35
Размышляю над computation expressions. В теории можно написать интересную обертку для http запросов

типа post url { header { header1 } }

Google
Friedrich
01.06.2017
09:22:00
типа post url { header { header1 } }
У Freya такой DSL есть, но для серверной стороны.

Vasily
01.06.2017
09:22:27
Надо поглядеть, как сделано. Мне с точки зрения дизайна на экспрешнах интересно

Интересная концепция программирования

Aleksander
01.06.2017
09:23:31
по-моему такие языки отчасти так и продаются - мол вы пишете dsl для своей предметной области, и потом основую задачу решаете уже на нем

Artemy
01.06.2017
09:24:48
А можно в CE добавить какую-нибудь свою конструкцию (метод и заменяющую его конструкцию)?

Aleksander
01.06.2017
09:25:17
https://github.com/dungpa/dsls-in-action-fsharp/blob/master/DSLCheatsheet.md

Artemy
01.06.2017
09:25:59
О, круто

Aleksander
01.06.2017
09:26:04
можно добавлять свои операции, типа sell \ buy, как в этом примере let example = trade { buy 100 "IBM" Shares At Max 45 sell 40 "Sun" Shares At Min 24 buy 25 "CISCO" Shares At Max 56 }

Artemy
01.06.2017
09:26:24
Ага, прикольно

Aleksander
01.06.2017
09:26:31
но вот насколько приятно потом будет такое поддерживать.. уже другой вопрос)

Vasily
01.06.2017
09:27:58
Если грамотно описать предметную область, то норм, думаю

Aleksander
01.06.2017
09:27:59
на F# я с таким не сталкивался, но на C# кастомные DSL, по моему опыту, штука очень спорная) пишется легко, все красиво, но через полгода сложно вспомнить что там внутри происходит

Vasily
01.06.2017
09:28:06
Для http норм зайдет

Artemy
01.06.2017
09:28:08
Всё ограничивается конструкциями из одного слова или можно-таки составные определить?

Типа sell ... to... buy ... from ...

Aleksander
01.06.2017
09:28:49
наверное, для вещей где все интуитивно понятно, должно быть ок.

Vasily
01.06.2017
09:29:01
Тут главное не усложнять

За ссылку большое спасибо, кстати

Это то, чем интересно заняться

Evgeniy
01.06.2017
09:40:58
выглядит как императивщина
Словно что-то плохое. Мне частенько for ближе и понятнее, чем композиция функций.

Google
Anton
01.06.2017
09:41:31
@gsomix ну хз, я for не катирую

Evgeniy
01.06.2017
09:41:35
Хорошо, что в F# все есть.

@the_RAMZAY Даже внутри seq нет? :)

Friedrich
01.06.2017
09:42:43
@Dolfik, а глянь материальчик, кстати: https://github.com/dungpa/dsls-in-action-fsharp/blob/master/DSLCheatsheet.md Может пригодиться для оформления API Funogram.

Anton
01.06.2017
09:46:29
@gsomix там нету for 0_o

Evgeniy
01.06.2017
09:46:44
@the_RAMZAY Я про seq expression.

Anton
01.06.2017
09:50:55
а

стоп - что за seq exression ?

Artemy
01.06.2017
09:51:34
seq { for i in 1 .. 10 -> i * i } например

Anton
01.06.2017
09:51:41
0_о

я не знал что так можно

Artemy
01.06.2017
09:51:58
Со списками тоже так можно

Artemy
01.06.2017
09:52:01
И с массивами

Anton
01.06.2017
09:52:05
но всеравно пользоваться не буду =)

Artemy
01.06.2017
09:52:21
Это что-то типа list comprehensions в Haskell

Anton
01.06.2017
09:53:02
[1..10] |> List.map (fun i -> i*i)

List.map (fun i -> i*i) [1..10]

Roman
01.06.2017
09:53:44
но всеравно пользоваться не буду =)
Sequence builder штука крутая и жутко полезная

Artemy
01.06.2017
09:53:57
seq { for i in 1 .. 10 do yield i + 1 yield i + 2 }

Google
Vasily
01.06.2017
09:54:59
но всеравно пользоваться не буду =)
Ты бы от таких привычек избавлялся... слишком это по-хипстерски

Artemy
01.06.2017
09:55:17
@the_RAMZAY глянь тут примеры ещё: https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/sequences

Evgeniy
01.06.2017
09:55:27
Vasily Молодой еще. *потряс бородой*

Vasily
01.06.2017
09:55:51
Ну я могу в ответ бородой потрясти :)

Artemy
01.06.2017
09:55:53
Императивщина - не императивщина — главное, что наглядно

Тем более, что это не императивщина по факту

Там за кулисами происходит цепочка вызовов методов

А с помощью yield! можно под-последовательности создавать, например

Evgeniy
01.06.2017
09:59:29
Artemy За кулисами seq { } компилируется в машину состояний.

Это такое особенное магическое CE.

Artemy
01.06.2017
10:00:31
А, ну ок

Всё равно пофигу

Главное, что использовать удобно

Evgeniy
01.06.2017
10:24:17
@the_RAMZAY Смотри, что покажу. https://github.com/Microsoft/visualfsharp/blob/master/src/fsharp/AttributeChecking.fs#L116

Anton
01.06.2017
10:25:37
нуууу

Evgeniy
01.06.2017
11:13:48
Держите интересную статью на вечер. https://amazingant.com/blog/2017/05/29/FSharp-Partially-Applied-Unions/

Nikolay
01.06.2017
11:29:30
А что если опциональные параметры вынести отдельно, типа так: Telegram.send MessageArgs(chatId, "text") .ParseMode(ParseMode.Html) .DisableNotification(true)

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