Andrew
Ayrat
вторую задачу меня так достало руками делать что я обязательно её сделаю
Roman
а решение с наследованием как у Сайма тебя не выручит?
Ayrat
Roman
у него там абстрактный класс моноид, но подробностей я тоже не помню
Roman
Но я не очень понимаю, как ты будешь генерить эти методы для универсального случая
Ayrat
Это не избавляет от необходимости складывать всё подряд
Vasily
Vasily
Бля, как хочется op_construct
Vladislav
а sum type и enum когда можно будет разными цветами в райдере???77 @fvnever
Ayrat
у него там абстрактный класс моноид, но подробностей я тоже не помню
я вот про такое
[<Struct>]
type GameStats =
{ Fga: int // Fga
Fgm: int // FG
Fta: int // Free throws Attempts
Tpa: int // 3PA
Tpm: int // 3P
Orb: int
Drb: int
Tov: int
Pts: int }
static member Zero =
{ Fga = 0
Fta = 0
Orb = 0
Drb = 0
Fgm = 0
Tov = 0
Pts = 0
Tpm = 0
Tpa = 0 }
static member (+) (a,b) =
{ Fga = a.Fga + b.Fga
Fta = a.Fta + b.Fta
Orb = a.Orb + b.Orb
Drb = a.Drb + b.Drb
Fgm = a.Fgm + b.Fgm
Tov = a.Tov + b.Tov
Pts = a.Pts + b.Pts
Tpa = a.Tpa + b.Tpa
Tpm = a.Tpm + b.Tpm }
type Stats =
{ OffStats : GameStats
DefStats : GameStats }
static member Zero =
{ OffStats = GameStats.Zero
DefStats = GameStats.Zero }
static member (+) (a,b) =
{ OffStats = a.OffStats + b.OffStats
DefStats = a.DefStats + b.DefStats }
... и т.д.
Dr. Friedrich
Dr. Friedrich
Годная мысля.
Ayrat
т.е. эти полотна кода руками писать с мультикурсором быстро, но утомительно
Ayrat
я бы кодогенерил
Ayrat
тем более там алгоритм есть
Ayrat
складываем всё подряд!
для zero берём или Zero у поля, или Unchecked.DefaultValue (это плохо, но допустим)
Roman
Roman
но я понял твою мысль.
Roman
А в квотейшнах можно экстеншены генерить? Типы же вроде нельзя объявлять
Ayrat
Vladislav
Ayrat
фантомас же как делает, он читает файл (с диска), пихает его в компайлерСервис, получает в ответочку AST файла.
разчпокивает это AST, модифицирует его
собирает из AST обратно строку (с новыми отступами и пр)
пишет полученную строку в файл
Ayrat
собсно кодогенерация которую я хотел примерно так же должна работать
для моноидов - помечаем желаемые рекорды атрибутом
[<IWannaBeMonoid>]
натравливаем кодогенератор.
Он модифицирует АСТ, убирает эти атрибуты, (или даже оставляет, пофигу) и генерит (+) и Zero, пишет обратно на диск
Ayrat
всё это в дотнет тул обернуть и вуаля
Ayrat
плюс полчаса жизни в день!!!
Vladislav
я хочу быть моноидом но мама не поймет
Ayrat
Vladislav
это да
Ayrat
короче, кодогенерация в F# поле абсолютно непаханное. Надо пахать, потому что руками надоело
Vladislav
java.lang.NullPointerException
Vladislav
well
Vladislav
@fvnever
https://youtrack.jetbrains.com/issue/RIDER-16391
https://youtrack.jetbrains.com/issue/RIDER-15125
Vladislav
а оно уже не покрывает это?
Dr. Friedrich
Dr. Friedrich
Вот ты видишь какой-то эпик "Create separate highlightings for F#"
Dr. Friedrich
Как скоро, по-твоему, его сделают?
Vladislav
тогда же когда и лонг неймы в датагрибе
Dr. Friedrich
По-моему, примерно никогда такой эпик в таком оформлении сделают.
Dr. Friedrich
Напиши там коммент хотяб.
Dr. Friedrich
Мол, хочу по-разному энумы и ADT.
Dr. Friedrich
Ну вот другое дело!
Vladislav
у тебя там на аве катана что ль?
Анна
Деанон!!!
Vladislav
дак давно уже.
Анна
Ну не знаю, я сразу после защиты диссера задеанонила 🤔
Анна
Теперь я окультуриваюсь в филармонии
Анна
Vasiliy
👌
x
как бы это подзарефакторить сраные енумы flags во что-то более приемлемое? и функциональное?
Shub
Hog
оккультирую
следи лучше за основным - заветная цифра близка :)
Shub
Aleksandr
Флаги, для чего они?
Hog
x
ща пример скину. С соседнего проекта люди мучатся
x
https://repl.it/repls/ComfortableValidPipelining
Hog
x
они короче там логику в ифах струячат
x
есть
Aleksandr
что, простите?
Например, вместо вызовов
makeCoffee(Flags.Sugar | Flags.Milk)
Делаешь
makeCoffee >> withSugar >> withMilk
Shub
тащемта это Builder. но я понял
Aleksandr
Builder и есть в частном виде декоратор, но да, так действительно понятней
Shub
это что-то новое.
Aleksandr
Прошу прощения, раз ошибся. Видимо сразу не так понял
https://stackoverflow.com/questions/4768349/builder-vs-decorator-pattern
x
да там у них не декораторы а куча императивной ебанины чтобы из двух энумов, стринга и опшенал децмала получить тру или фолс
x
короче домейн модель говно
x
надо всё переделать
Aleksandr
тащемта это Builder. но я понял
Кстати, вариант
makeCoffee >> withSugar >> withMilk
наверное, действительно декоратор, а вот:
makeCoffee (withSugar >> withMilk)
это уже билдер. И он действительно лучше
x
Так. Я малость запутался. Вот у меня энумерабл флагс, в с#. Ими я могу задать штуку которая «А» и «Б» и «Ц», штуку которая «А» и «Г» и «Д» и так далее. А с алгебраическими типами я как бы только могу задать штуку которая «А» ИЛИ «Б» ИЛИ «Ц». Как мне повторить функциональность флагов в алгебраических типах? 🤔
Vladislav
Тупля :)
Vladislav
Список
Igor
Vladislav
Ломаю себе мозг элмишем