M
Size: a a a
M
ΛВ
ΛВ
ΛВ
ЮБ
RefinedType.from(underlying)
Width(underlying)
M
RefinedType.from(underlying)
Width(underlying)
ЮБ
object ExtractedAttributeUnit extends TaggedType[String Refined NonEmpty] {
def from(s: String): Either[String, ExtractedAttributeUnit] = refineV[NonEmpty](s).map(ExtractedAttributeUnit(_))
def unsafeFrom(s: String): ExtractedAttributeUnit = from(s).fold(e => throw new IllegalArgumentException(e), identity)
}
type ExtractedAttributeUnit = ExtractedAttributeUnit.Type
ΛВ
RefinedType.from(underlying)
Width(underlying)
ЮБ
ΛВ
ΛВ
M
M
ЮБ
Width(...)
. А с вот этой конструкцией `RefinedType.from(...)` ты смешиваешь бизнес логику с какими-то техническими деталями. Это отвратительно читается. Плюс, чтобы создать какой-то тип, ты должен откуда-то из библиотеки что-то взять и дёрнуть. Получается, тип какой-то не самодостаточный — у него нет нормального конструктора.
ΛВ
Width(...)
. А с вот этой конструкцией `RefinedType.from(...)` ты смешиваешь бизнес логику с какими-то техническими деталями. Это отвратительно читается. Плюс, чтобы создать какой-то тип, ты должен откуда-то из библиотеки что-то взять и дёрнуть. Получается, тип какой-то не самодостаточный — у него нет нормального конструктора.
ΛВ
ЮБ
M
M
ЮБ