Size: a a a

Scala User Group

2020 January 24

Oℕ

Oleg ℕizhnik in Scala User Group
какая-то сигнатура
источник

M

Mikhail in Scala User Group
Mikhail
Не нужно сортировать. Имплисит проверкой.  def refine[H <: HList](h:H)(implicit ev:Evidence[H, Etalon]) - эвиденс легко проверит, что лист не пустой и встречается не более одного экземпляра из эталона
^ . Имплисит сам проверит, что лист не пустой и содержит не более одного экземпляра из набора перечисленных в эталоне
источник

YS

Yaroslav Sushkov in Scala User Group
Mikhail
покажи код. как ты это планируешь использовать
type A
type B
type C
type D

type Error
type Input
type ABCDResult

def parse(input: Input): Either[Error, ABCDResult] = {
 val aOpt: Option[A] = ???
 
val bOpt: Option[B] = ???
 
val cOpt: Option[C] = ???
 
val dOpt: Option[D] = ???
 Either
.cond(aOpt.nonEmpty || bOpt.nonEmpty || cOpt.nonEmpty || dOpt.nonEmpty, ABCDResult(...), Error)
}
источник

YS

Yaroslav Sushkov in Scala User Group
супер-обобщенно
источник

YS

Yaroslav Sushkov in Scala User Group
идея в том, что для ABCDResult описаны такие инварианты, что в него не засунуть невалидные данные
источник

YS

Yaroslav Sushkov in Scala User Group
естественно потом будет аккумуляция ошибок, Nel в сигнатуре,  either/validated вместо option
источник

YS

Yaroslav Sushkov in Scala User Group
и т.д.
источник

M

Mikhail in Scala User Group
Yaroslav Sushkov
type A
type B
type C
type D

type Error
type Input
type ABCDResult

def parse(input: Input): Either[Error, ABCDResult] = {
 val aOpt: Option[A] = ???
 
val bOpt: Option[B] = ???
 
val cOpt: Option[C] = ???
 
val dOpt: Option[D] = ???
 Either
.cond(aOpt.nonEmpty || bOpt.nonEmpty || cOpt.nonEmpty || dOpt.nonEmpty, ABCDResult(...), Error)
}
это ты показываешь как раз рантайм часть, в которой компайл тайм тебе нах не нужен. ты покажи как ты потом работать собираешься с ABCDResult и где действительно показана необходимость компайл тайм ограничений на абцд.

если у тебя АБСД строится исключительно в рантайме, то просто убери всякую возможность построить АБЦД в компайл тайме обходя базовую проверку и все проблемы у тебя сами исчезнут
источник

M

Mikhail in Scala User Group
Yaroslav Sushkov
естественно потом будет аккумуляция ошибок, Nel в сигнатуре,  either/validated вместо option
все это никак не отражает необходимость компайл тайм проверок сложно-составного типа
источник

HV

Henadz Varantsou in Scala User Group
господа, такой вопрос
источник

HV

Henadz Varantsou in Scala User Group
если мы пишем class A[T] { ... } или trait B[T] { ... }
ну т.е. какую-нибудь конструкцию, параметризованную типом Т, как она называется по-русски в общем?
я нашёл в интернете упоминания на английском: generic class/trait
а как правильно назвать по-русски?
источник

ΛВ

Λнтон Войцишевский in Scala User Group
Henadz Varantsou
если мы пишем class A[T] { ... } или trait B[T] { ... }
ну т.е. какую-нибудь конструкцию, параметризованную типом Т, как она называется по-русски в общем?
я нашёл в интернете упоминания на английском: generic class/trait
а как правильно назвать по-русски?
полиморфный (параметрически) тип А/В?
источник

HV

Henadz Varantsou in Scala User Group
Λнтон Войцишевский
полиморфный (параметрически) тип А/В?
так а конкретно применительно к классу?
источник

HV

Henadz Varantsou in Scala User Group
полиморфный класс?
источник

AI

Andrei Iatsuk in Scala User Group
обобщенный класс?
источник

HV

Henadz Varantsou in Scala User Group
Andrei Iatsuk
обобщенный класс?
вот я тоже нашёл это в доках скалы на русском
источник

HV

Henadz Varantsou in Scala User Group
но насколько это употребляемое название?
источник

HV

Henadz Varantsou in Scala User Group
если я скажу так, меня поймут?
источник

AI

Andrei Iatsuk in Scala User Group
всегда этим термином пользуюсь, когда о дженериках говорю
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Henadz Varantsou
если мы пишем class A[T] { ... } или trait B[T] { ... }
ну т.е. какую-нибудь конструкцию, параметризованную типом Т, как она называется по-русски в общем?
я нашёл в интернете упоминания на английском: generic class/trait
а как правильно назвать по-русски?
по-русски тебя всегда поймут
источник