Size: a a a

Scala User Group

2020 April 27

ΛВ

Λнтон Войцишевский in Scala User Group
Рефайнед такое дает
источник

LB

Let Eat Bee in Scala User Group
вобщем если жить с ними надо, то обошли пока так:
- в парметры sql"" передаем нормальный тип, который внутри рефайнед сидит
- реализуем doobie Get[A] для рефайнмент типов ,чтобы читать объекты у которых поля рефайнед

После этих измнений отпустило
источник

LB

Let Eat Bee in Scala User Group
Λнтон Войцишевский
Хочется кейсы вроде StringThatIs13Or10SizeAndAllDigits проще выражать
ну так ньютайп где в конструкторе проверять как хочется, нет?
источник

ΛВ

Λнтон Войцишевский in Scala User Group
Let Eat Bee
ну так ньютайп где в конструкторе проверять как хочется, нет?
Приходится писать эту логику руками, ошибки там и все такое
источник

ΛВ

Λнтон Войцишевский in Scala User Group
Ещё рефайнд с сабтайпингом работает, можно писать someRefinedString.contains(fooo)
источник

LB

Let Eat Bee in Scala User Group
Λнтон Войцишевский
Приходится писать эту логику руками, ошибки там и все такое
для рефайнед тоже писать надо и поболее:
case class CumulativeCoefficient(value: ValidatedCumulativeCoefficient) {
 def bigDecimalValue = value.value
}

object CumulativeCoefficient {

 def fromServiceModel(
   cumulativeCoefficient: services.model.CumulativeCoefficient
 ) = fromBigDecimal(cumulativeCoefficient.value)

 def fromBigDecimal(value: BigDecimal): Either[String, CumulativeCoefficient] =
   refineV[ValidatedCumulativeCoefficientPredicate](value)
     .map(apply)


 val maxCumulativeCoefficient: BigDecimal = BigDecimal(2)

 implicit val maxCumulativeCoefficientWitness = Witness(maxCumulativeCoefficient)

 type MaxCumulativeCoefficient = maxCumulativeCoefficientWitness.T

 type ValidatedCumulativeCoefficient = BigDecimal Refined ValidatedCumulativeCoefficientPredicate

 type ValidatedCumulativeCoefficientPredicate = Positive And LessEqual[MaxCumulativeCoefficient]

 implicit val eq: Eq[CumulativeCoefficient] = Eq.fromUniversalEquals

}
источник

ΛВ

Λнтон Войцишевский in Scala User Group
Let Eat Bee
для рефайнед тоже писать надо и поболее:
case class CumulativeCoefficient(value: ValidatedCumulativeCoefficient) {
 def bigDecimalValue = value.value
}

object CumulativeCoefficient {

 def fromServiceModel(
   cumulativeCoefficient: services.model.CumulativeCoefficient
 ) = fromBigDecimal(cumulativeCoefficient.value)

 def fromBigDecimal(value: BigDecimal): Either[String, CumulativeCoefficient] =
   refineV[ValidatedCumulativeCoefficientPredicate](value)
     .map(apply)


 val maxCumulativeCoefficient: BigDecimal = BigDecimal(2)

 implicit val maxCumulativeCoefficientWitness = Witness(maxCumulativeCoefficient)

 type MaxCumulativeCoefficient = maxCumulativeCoefficientWitness.T

 type ValidatedCumulativeCoefficient = BigDecimal Refined ValidatedCumulativeCoefficientPredicate

 type ValidatedCumulativeCoefficientPredicate = Positive And LessEqual[MaxCumulativeCoefficient]

 implicit val eq: Eq[CumulativeCoefficient] = Eq.fromUniversalEquals

}
С телефона оч плохо читается, но есть же синтаксис в рефайнде, который сам генерит подобные методы
источник

LB

Let Eat Bee in Scala User Group
Λнтон Войцишевский
Ещё рефайнд с сабтайпингом работает, можно писать someRefinedString.contains(fooo)
я скалу раз в год пятилетку смотрю, но вроде есть всякие имплисит конверсии?
источник

DZ

Dmitry Zuev in Scala User Group
Λнтон Войцишевский
Ещё рефайнд с сабтайпингом работает, можно писать someRefinedString.contains(fooo)
Рудогма теги тож
источник

ΛВ

Λнтон Войцишевский in Scala User Group
Let Eat Bee
для рефайнед тоже писать надо и поболее:
case class CumulativeCoefficient(value: ValidatedCumulativeCoefficient) {
 def bigDecimalValue = value.value
}

object CumulativeCoefficient {

 def fromServiceModel(
   cumulativeCoefficient: services.model.CumulativeCoefficient
 ) = fromBigDecimal(cumulativeCoefficient.value)

 def fromBigDecimal(value: BigDecimal): Either[String, CumulativeCoefficient] =
   refineV[ValidatedCumulativeCoefficientPredicate](value)
     .map(apply)


 val maxCumulativeCoefficient: BigDecimal = BigDecimal(2)

 implicit val maxCumulativeCoefficientWitness = Witness(maxCumulativeCoefficient)

 type MaxCumulativeCoefficient = maxCumulativeCoefficientWitness.T

 type ValidatedCumulativeCoefficient = BigDecimal Refined ValidatedCumulativeCoefficientPredicate

 type ValidatedCumulativeCoefficientPredicate = Positive And LessEqual[MaxCumulativeCoefficient]

 implicit val eq: Eq[CumulativeCoefficient] = Eq.fromUniversalEquals

}
источник

ΛВ

Λнтон Войцишевский in Scala User Group
По сути фром методы
источник

LB

Let Eat Bee in Scala User Group
Λнтон Войцишевский
С телефона оч плохо читается, но есть же синтаксис в рефайнде, который сам генерит подобные методы
ничего не могу сказать. я день потратил отлавливая косяски с ними и ничего кроме мата у меня про них нет :) но это от непонимания больше
источник

M

Mikhail in Scala User Group
Let Eat Bee
для рефайнед тоже писать надо и поболее:
case class CumulativeCoefficient(value: ValidatedCumulativeCoefficient) {
 def bigDecimalValue = value.value
}

object CumulativeCoefficient {

 def fromServiceModel(
   cumulativeCoefficient: services.model.CumulativeCoefficient
 ) = fromBigDecimal(cumulativeCoefficient.value)

 def fromBigDecimal(value: BigDecimal): Either[String, CumulativeCoefficient] =
   refineV[ValidatedCumulativeCoefficientPredicate](value)
     .map(apply)


 val maxCumulativeCoefficient: BigDecimal = BigDecimal(2)

 implicit val maxCumulativeCoefficientWitness = Witness(maxCumulativeCoefficient)

 type MaxCumulativeCoefficient = maxCumulativeCoefficientWitness.T

 type ValidatedCumulativeCoefficient = BigDecimal Refined ValidatedCumulativeCoefficientPredicate

 type ValidatedCumulativeCoefficientPredicate = Positive And LessEqual[MaxCumulativeCoefficient]

 implicit val eq: Eq[CumulativeCoefficient] = Eq.fromUniversalEquals

}
если писать на скале как на энтерпрайз джаве 1.5, то удовольствия это явно не доставит. братиш, выкинь весь этот говнокод и пиши просто и по человечески. компайл тайм рефайнд предикаты - почти не применимы в жизни.
object CumulativeCoefficient extends TaggedType0[BigDecimal]{
 val max:Type = TaggedOps(this)(BigDecimal(2))
 
 //... или любая другая логика вместо Either
 def apply(value:Long):Either[String,Type] = ...validate > 0 and <= max..
}
type CumulativeCoefficient = CumulativeCoefficient.Type
источник

M

Mikhail in Scala User Group
@yamlcoder ну и кстати, любой метод вида - def fromBigDecimal(value: BigDecimal) - является тавтологией. будь проще - def from(v:BigDecimal) - у тебя уже есть тип, незачем его еще в название метода пихать без лишней необходимости
источник

LB

Let Eat Bee in Scala User Group
Mikhail
@yamlcoder ну и кстати, любой метод вида - def fromBigDecimal(value: BigDecimal) - является тавтологией. будь проще - def from(v:BigDecimal) - у тебя уже есть тип, незачем его еще в название метода пихать без лишней необходимости
код не мой, я на скале вообще не пишу, два часа разбирался как => Unit запустить в нескольких тредах :) за советы спасибо, но ничего с ними сделать не могу
источник

λ

λoλegΥch in Scala User Group
Mikhail
@yamlcoder ну и кстати, любой метод вида - def fromBigDecimal(value: BigDecimal) - является тавтологией. будь проще - def from(v:BigDecimal) - у тебя уже есть тип, незачем его еще в название метода пихать без лишней необходимости
обычно лучше избегать оверлоадинга
источник

M

Mikhail in Scala User Group
λoλegΥch
обычно лучше избегать оверлоадинга
советы из мира джаваскрипт?
источник

ΛВ

Λнтон Войцишевский in Scala User Group
Mikhail
если писать на скале как на энтерпрайз джаве 1.5, то удовольствия это явно не доставит. братиш, выкинь весь этот говнокод и пиши просто и по человечески. компайл тайм рефайнд предикаты - почти не применимы в жизни.
object CumulativeCoefficient extends TaggedType0[BigDecimal]{
 val max:Type = TaggedOps(this)(BigDecimal(2))
 
 //... или любая другая логика вместо Either
 def apply(value:Long):Either[String,Type] = ...validate > 0 and <= max..
}
type CumulativeCoefficient = CumulativeCoefficient.Type
это на чем написано?

(ну и рефайнед не только про компайл тайм предикаты, он же еще генерит проверки значений из рантайма)
источник

M

Mikhail in Scala User Group
Λнтон Войцишевский
это на чем написано?

(ну и рефайнед не только про компайл тайм предикаты, он же еще генерит проверки значений из рантайма)
supertagged
источник

M

Mikhail in Scala User Group
основной смысл рефайнд либы - именно компайлтайм предикаты, в остальном это ущербная поделка
источник