под HK-тайп-параметр, но вот вопрос - можно ли как-то без бойлерплейтных методов сохранить дефолтные значения для случая c Id[_]? Может, есть какие-нибудь хитрости?
генерализовать дата классы - плохая идея. вот бы кто макрос @hkd написал, который бы делал двойника да набор трансформаций и утилитарных операций..., да еще плагин к идее (по мотивам extension libraries) чтобы это все идейка прозрачно видела.
Я обычно делаю алиас, для него - объект компаньон, а в нем еплай з дефолтными значениями. Но это в лоб, можно и либу придумать на самом деле
Оно просто читается нормально
А почему плохая, интересно?
Да, может чуть красивее, чем придумывать имя для метода внутри компаньона HKD. Хотя смысл тот же - продублировать метод под Id[_] :)
потому что hkd - это паттерн, а датакласс - нерушимая и простая основа. мода - она приходящая и уходящая, и постоянно трансформирующаяся. с первого раза ничего путного и законченного не сделаешь, нужно проявлять достаточную гибкость. вот даже в твоем предложении кусок - "хочется ЧАСТЬ существующих" - непрозрачно намекает, что ты не готов к такому полномасштабному рефакторингу - и правильно. кто будет потом обратно рефакторить? где грань когда одно становится выгоднее другого? за чей счет банкет? кто вернет тебе упущенное время? поэтому выгоднее иметь @hkd и автоматические трансформации. И тогда можно экспериментировть безболезненно
часть, потому что где-то это не нужно и только ID используется
и как же ты сумел однозначно провести грань, чтобы гарантированно не ошибиться? приписать @hkd - дело секундное, а ручками приписывать - это знаешь ли уже не спринт, а бег как минимум на средние дистанции, а ростом проекта того и гляди перейдет в длинные и марафонские...
у меня не руки чешутся что-то модное попробовать, а именно есть уже проблема дублирования и недостатка типизации в рамках одного подпроекта
гипотетически можно пройтись макросом и сделать реализацию какого-то trait HKDDefault[Data[f[_]]]{ def default: Data[Option] } на базе собранных значений и дальше цеплять её вместе с остальными как @derive(Craft, Names, HKDDefault) case class Foo[F[_]](...)
Сложно дискутировать, когда человеку рассказываешь про светлое будущее, а он тебе говорит, что у него вчерашние щи прокисли.
Так когда кушать пора, а щи прокисли, не до дискуссий про будущее
можно, например, не дискутировать
Если не думать о завтрашнем дне, то прокисшие щи так и будут нормой жизни
да, думал нечто подобное, но тут снова в макросы упирается. Ещё думал может что-то типа аннотации @idDefault(value) для поля, и тоже макросом их собирать
Осталось это в правила группы добавить
я у себя без макроса просто объявил такой совсем неимплиситный val default = Foo[Option](...)
Обсуждают сегодня