
Vasily
03.08.2018
07:02:20
Но ещё нам надо задавать их порядок

Evgeniy
03.08.2018
07:12:45

Friedrich
03.08.2018
07:13:07

Google

Evgeniy
03.08.2018
07:13:58
Попробуйте не прописать .fs в проекте, ничего не соберется.

Vasily
03.08.2018
07:26:15
В общем, факт в том, что баг есть
И чинить его надо

Pavel
03.08.2018
07:26:58
Два экрана?
Ну да, в терминах веба это обычно называется страница. Привязка к урлу для навигации, синхронизация данных между экранами.

Evgeniy
03.08.2018
07:27:19
Ок, это интересно!

Vagif
03.08.2018
07:47:56
Обсуждаем с коллегами использование F# Lint в build-процессе. Мне нравится, как линт работает в VS Code/Ionide, а можно ли его настроить в Райдере?
Я немного скептически отношусь к тому, чтобы линт встраивать в build и интерпретировать его замечания как ошибку. Имхо, линт должен советовать, а не требовать.
Идеально было бы в Райдере видеть рекомендации линта. Кто-нибудь знает, возможно ли это? @auduchinok

Eugene
03.08.2018
07:50:24
А какие именно анализы оттуда хотелось бы видеть?
Отвечая на вопрос — возможно. Но я бы предпочёл завести решарперные анализы вместо многих из линта.

Vagif
03.08.2018
07:52:27
Ну примерно те же, что и lint выдает, когда я работаю с VSCode:
x::[] might be able to be refactored into [x].
fun _ -> () might be able to be refactored into ignore.

Google

Vagif
03.08.2018
07:53:11
Это возможно сегодня или требует обновления в райдере?
А чем тебе F# lint, которым Ionide пользуется, не нравится?

Eugene
03.08.2018
07:57:10
Часть анализов дублирует то, что есть в решарпере, и что в планах завести.
Интегрировать некоторые решарперные фиксы будет гораздо предпочтительнее.
Не то чтобы он прям не нравится.)

Vagif
03.08.2018
07:59:18
А это в краткосрочных планах? ?

Eugene
03.08.2018
08:01:07
Можно попробовать в 2018.3 на него посмотреть. Сейчас — фиксы важных багов в 2018.2 и продолжение рефакторингов в кэшах для ренейма.

Vagif
03.08.2018
08:05:39
Sounds good.

Vasily
03.08.2018
08:07:24

Ayrat
03.08.2018
08:10:13
Я бы в билд процесс автоформатинг включил, т.к. линтер в Иониде иногда делает дичЪ
sequence
|> Seq.map (fun x ->
страшный мапинг
на пару строк)
|> Seq.map (fun x ->
какой-то другой мапинг
на ещё пару
тройку строк)
он всё подчеркивает и говорит что дескать надо кровь из носу закомпозировать
и предлагает так (и это ужасно)
Seq.map ((fun x -> .... ) >> (fun x -> .... )) sequence

Eugene
03.08.2018
08:10:16
Прям планов пока не было. :)
Только недавно появился issue про это, я могу посмотреть и на это, но тоже уже в 2018.3.

Vagif
03.08.2018
08:19:38
Да, меня это его стремление поменять все на композицию страшит

Friedrich
03.08.2018
09:10:39
Но тогда придётся следить чтоб он не дублировал решарперные suggestions

Evgeniy
03.08.2018
10:44:57
Привет.

Ayrat
03.08.2018
11:43:54
вопрос, кто помнит какой метод в CE билдере надо реализовать чтобы он мог делать так
state {
something
andSomethingElse
}
при этом something и somethingElse вызывают методы билдера и меняют его с каждой строчкой

Vasily
03.08.2018
11:44:31
Delay
Скорее всего
Надо в спеке глянуть

Google

Vasily
03.08.2018
11:44:59
Или Combine

Ayrat
03.08.2018
11:45:02
ну вот я в спеку гляжу и вижу фигу
https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/computation-expressions#creating-a-new-type-of-computation-expression
точнее не в спеку
а в доку

Vasily
03.08.2018
11:45:23
Не в ту спеку спотришь
Ща

Ayrat
03.08.2018
11:45:35
да читал я ту спеку
она местами устарела
в спеке например написано что кейсы DU можно так создавать
union-type-case-data :=
ident --null union case
ident of union-type-field * ... * union-type-field --n-ary union case
ident : uncurried-sig --n-ary union case
uncurried-sig :=
args-spec -> type
args-spec :=
arg-spec * ... * arg-spec
но это неправда
вот эта строчка не пашет:
ident : uncurried-sig --n-ary union case

Vasily
03.08.2018
11:48:29
Короче,тебе на страницу 76
Там на примере асинка

Ayrat
03.08.2018
11:49:30
ты ж на эту смотришь?
https://fsharp.org/specs/language-spec/4.1/FSharpSpec-4.1-latest.pdf
чтоб у нас страницы были одинаковые)
хм, и правда чтоль делей
подозрительно

Evgeniy
03.08.2018
12:10:30

Vasily
03.08.2018
12:16:28

Google

Vasily
03.08.2018
12:16:46
Короче
Там где-то в начале есть сигнатура полного вызова

Ayrat
03.08.2018
12:17:26
не, я выяснил. Надо сделать нелогичное и реализовать Yield

Vasily
03.08.2018
12:17:40
Странно

Ayrat
03.08.2018
12:17:46
Да

Vasily
03.08.2018
12:17:48
Комбайн вроде
Или я тебя не так понял

Ayrat
03.08.2018
12:19:52
Да я может сам себя не понял. Я хочу в CE задавать некие настройки декларативно, а потом их исполнить.
Настройки меняют стейт CE при вызове, флаги там переключают, добавляют всякое. Т.е. под конец CE будет раздутая и готовая к выполнению

Vasily
03.08.2018
12:30:53
Ну сделай дефолтный yield
И кучу кастомных команд
На применение настроек
В общем, по факту у тебя получится фолд
https://github.com/vshapenko/HttpBuilder/blob/master/HttpWrapper/Program.fs
Вот говнопример

Ayrat
03.08.2018
12:33:15
о, вроде похоже

Vasily
03.08.2018
12:33:32
Но это работает только на кастомные операции
У тебя первым параметром контекст применения
Вторым собственно что делаешь
Я, помню, пытался с помощью билдера конструировать функцию создания объекта

Ayrat
03.08.2018
12:34:32
хм. Ну да, чот типа

Google

Vasily
03.08.2018
12:35:33
В общем, там надо понимать
Что в целом можно даже bind не реализовывать

Ayrat
03.08.2018
12:36:40
Да, я так и думал, мне ж let не нужен

Vasily
03.08.2018
12:38:29
Главное, не забыть Yield(())

Ayrat
03.08.2018
12:38:55
меня как-то бомбило с вида функций, которые должны принимать unit )))
(())

Vasily
03.08.2018
12:44:10
Сказал бы я, но чат не тот

Roman
03.08.2018
12:54:20
Или () |> myFunc

Ayrat
03.08.2018
12:56:02
хм, не могу найти в телеге, ща
https://t.me/fsharp_chat/61348
нашёл))

Roman
03.08.2018
13:00:41
Какая сигнатура у конструктора?

Ayrat
03.08.2018
13:00:56
Короче, чтобы заново не разливаться мыслею по древу
Class() - вызов пустого конструктора
Class(()) - вызов непустого конструктора, который принимает unit
Class(()) :: Class
ну точнее нет
конструктор такой new:: unit -> Class
вызов в F# выглядит как Class(())
обоже, member __.Yield() = ... и member __.Yield(()) =... не одно и то же, лол!
я думал это только для классов работает
причём сигнатура одинаковая, а CE хочет второй вариант - Yield(())