Size: a a a

Scala User Group

2020 April 28

ЮБ

Юрий Бадальянц in Scala User Group
Хотя идея крутая, спору нет. Но tagged типы перекрывают refined полностью
источник

ЮБ

Юрий Бадальянц in Scala User Group
Λнтон Войцишевский
А в 4 в чем именно ограничения?
Ну захочешь ты какую-нибудь хитрожопую проверку, которой нет в рефайнде. И что ты делать будешь? В приватном конструкторе ты можешь вообще любую проверку впихнуть.
источник

ΛВ

Λнтон Войцишевский in Scala User Group
Юрий Бадальянц
Ну захочешь ты какую-нибудь хитрожопую проверку, которой нет в рефайнде. И что ты делать будешь? В приватном конструкторе ты можешь вообще любую проверку впихнуть.
Напишу свой предикат
источник

ЮБ

Юрий Бадальянц in Scala User Group
В рефайнде ты тоже можешь, но там через хитрые тайпклассы это надо описывать, геморой ещё то
источник

ΛВ

Λнтон Войцишевский in Scala User Group
Там в доке написано, как их писать
источник

ЮБ

Юрий Бадальянц in Scala User Group
Но зачем? КОгда можно просто в конструкторе сделать провеку?
источник

ΛВ

Λнтон Войцишевский in Scala User Group
Юрий Бадальянц
Но зачем? КОгда можно просто в конструкторе сделать провеку?
90% времени мне нужны простые кейсы
источник

ΛВ

Λнтон Войцишевский in Scala User Group
Которые выливаются в бойлерплейт
источник

ЮБ

Юрий Бадальянц in Scala User Group
Какой бойлерплейт?
источник

ЮБ

Юрий Бадальянц in Scala User Group
Рефайнд как раз таки добавляет много бойлерплейта
источник

M

Mikhail in Scala User Group
Валидейтед - более широкое более и оно покрывает то, что не покрывается напрямую рефайндом. Но, кстати, может быть покрыто рефайндом сбоку. Что-то вроде (но это не совсем точно, надо убедиться, что перекрытия типов нет - в любом случае это выполнимо. И на тегах тоже):
`
object Validated extends NewType0 {
type Type[Predicat,T] = Newtype[T], Ops[Predicat,T]]
def apply(v:T)(implicit C:CheckPredicat[Predicat,T]):Either, Option, XYZ =
}
type Validated[P,T] = Validated.Type[P,T]
`
источник

ΛВ

Λнтон Войцишевский in Scala User Group
Написание этих конструкторов
источник

ΛВ

Λнтон Войцишевский in Scala User Group
Кидание ошибок, написание этих конструкторов и самой логики внутри, декодеры, энкодеры делать, котовые тайпклассы некоторые
источник

ΛВ

Λнтон Войцишевский in Scala User Group
В рефайнд это занимает две строки, одна тайпалиас объявить, вторая обжект написать, а тайпклассы импортируются
источник

M

Mikhail in Scala User Group
Юрий Бадальянц
Я не совсем об этом. Я о том, что нет смысла выносить это в тип. Достаточно сделать свой Amount, который невозможно сконструировать с невалидным значением. То есть достаточно рантайм конструктора, который возрвщает Option или Either. То, как сделано в Refined, где проверяются литералы, на мой взгляд довольно бесполезно. Вот мы сейчас его используем вперемешку с supertagged и всё больше переносим с refined на tagged типы, потому что проверка литералов не нужна, нужны только безопасные конструкторы.
Все правильно про литералы - бесполезные почти всегда. Но слово рефайнд - оно не обязательно относится к компайл тайм - это просто уточненный тип, когда мы кодируем в типе
источник

ЮБ

Юрий Бадальянц in Scala User Group
Ну, ок. Мне важнее отказ от AnyVal и нормальные ошибки
источник

ЮБ

Юрий Бадальянц in Scala User Group
Mikhail
Все правильно про литералы - бесполезные почти всегда. Но слово рефайнд - оно не обязательно относится к компайл тайм - это просто уточненный тип, когда мы кодируем в типе
Я скорее про конкретную либу
источник

ΛВ

Λнтон Войцишевский in Scala User Group
Юрий Бадальянц
Ну, ок. Мне важнее отказ от AnyVal и нормальные ошибки
С этим согласен, меня пока беспокоит производительность, но чёт люди говорят не о ней
источник

M

Mikhail in Scala User Group
Λнтон Войцишевский
90% времени мне нужны простые кейсы
99% времени ты получаешь данные извне, а не из статик данных в коде. Поэтому компайл тайм фича с литералами оказывается бесполезной. А реализовать рефайнды - а оставшаяся часть в либе scala-refined крайне убогая, которая на 100% покрывается тегами, ньютайпами - да еще и удобства и свободы действий поболе будет)
источник

ЮБ

Юрий Бадальянц in Scala User Group
Mikhail
99% времени ты получаешь данные извне, а не из статик данных в коде. Поэтому компайл тайм фича с литералами оказывается бесполезной. А реализовать рефайнды - а оставшаяся часть в либе scala-refined крайне убогая, которая на 100% покрывается тегами, ньютайпами - да еще и удобства и свободы действий поболе будет)
двачую бро
источник