Size: a a a

Scala User Group

2020 January 24

λ

λoλegΥch in Scala User Group
вопще сильно мудреная какаято фигня, зачем оно нужно если не секрет?
источник

λ

λoλegΥch in Scala User Group
Yevhen
Акку
про акку не знаю, но по идее аналогично с плеем должны быть методы типа play.api.mvc.Results.Status#chunked(akka.stream.scaladsl.Source<C,?>, scala.Option<java.lang.String>, play.api.http.Writeable<C>)

play.api.mvc.Results.Status#sendPath
источник

λ

λoλegΥch in Scala User Group
λoλegΥch
case class X[A,B=!=A,C=!=B=!=A,D=!=A=!=C=!=B](a:A,b:Option[B]...)
=:!= в шейплесе есть
источник

YS

Yaroslav Sushkov in Scala User Group
λoλegΥch
=:!= в шейплесе есть
точняк, спасибо! но выглядит действително мудрено слишком)
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Yaroslav Sushkov
Скаланны, подскажите как закодировать одну штуку на типах? есть 4 типа  A, B, C, D.  Нужна коллекция, которая содержит минимум один элемент, и не более 1 каждого типа, при этом порядок может меняться.
A Ior B Ior C Ior D
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Про порядок меняться - не понял
источник

YS

Yaroslav Sushkov in Scala User Group
Oleg ℕizhnik
A Ior B Ior C Ior D
вот да, над этим я тоже думал)
источник

YS

Yaroslav Sushkov in Scala User Group
Oleg ℕizhnik
Про порядок меняться - не понял
[A, B, C, D] == [D, C, B, A] и прочие перемешивания
источник

YS

Yaroslav Sushkov in Scala User Group
чтобы они по типам пролазили
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Это почти никогда на типах не работает
источник

YS

Yaroslav Sushkov in Scala User Group
можно конечно отсортировать
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Ну если совсем формально, то так

trait Quadro[A, B, C, D]{
 def fold[R: CommutativeMonoid](
  a: A => R, b: B => R, c : C => R, d : D => R): R
}

но здесь теряется свойство "не больше одного"
источник

YS

Yaroslav Sushkov in Scala User Group
λoλegΥch
вопще сильно мудреная какаято фигня, зачем оно нужно если не секрет?
по доменной модели так получается. Есть парсер, который может нечто распарсить, например url или html, и нужно чтобы он возвращал или набор элементов, которые не повторяются, и где есть хотя бы один, либо ошибку
источник

Oℕ

Oleg ℕizhnik in Scala User Group
просто непустая коллекция A, B, C, D в неопределённом порядке и количестве
источник

YS

Yaroslav Sushkov in Scala User Group
в общем, видимо мои вкусы очень специфичны))
источник

M

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

M

Mikhail in Scala User Group
Yaroslav Sushkov
по доменной модели так получается. Есть парсер, который может нечто распарсить, например url или html, и нужно чтобы он возвращал или набор элементов, которые не повторяются, и где есть хотя бы один, либо ошибку
оу. парсеры - дело рантайма, компайл тайм проверки то зачем тебе?
источник

YS

Yaroslav Sushkov in Scala User Group
ну мне хотелось описать инвариант на уровне типов, чтобы туда физически не положить невалидные данные
источник

Oℕ

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

YS

Yaroslav Sushkov in Scala User Group
а проверяться это будет понятное дело в рантайме
источник