Size: a a a

Генератор непрочитанных сообщений

2020 July 03

AK

Alexander Kladov in Генератор непрочитанных сообщений
Dmitriy Tkachenko
потому что хрень какая-то
зря ты, крутая же вещь
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
типа PersonAge extends PositiveNumber, Integer, NotGreaterThan200?
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
я не знаю как это реализовано, но суть в том, что ты можешь создавать типы со сложными правилами
источник

A

Aleksandr Khristenko in Генератор непрочитанных сообщений
Dmitriy Tkachenko
типа PersonAge extends PositiveNumber, Integer, NotGreaterThan200?
scala> type ZeroToOne = Not[Less[W.`0.0`.T]] And Not[Greater[W.`1.0`.T]]
defined type alias ZeroToOne

scala> refineMV[ZeroToOne](1.8)
<console>:40: error: Right predicate of (!(1.8 < 0.0) && !(1.8 > 1.0)) failed: Predicate (1.8 > 1.0) did not fail.
      refineMV[ZeroToOne](1.8)
источник

A

Aleksandr Khristenko in Генератор непрочитанных сообщений
Комбинаторы на уровне типов, которыми ты собираешь нужый тип.
источник

A

Aleksandr Khristenko in Генератор непрочитанных сообщений
https://github.com/fthomas/refined - больше примеров можно тут увидеть
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
Aleksandr Khristenko
scala> type ZeroToOne = Not[Less[W.`0.0`.T]] And Not[Greater[W.`1.0`.T]]
defined type alias ZeroToOne

scala> refineMV[ZeroToOne](1.8)
<console>:40: error: Right predicate of (!(1.8 < 0.0) && !(1.8 > 1.0)) failed: Predicate (1.8 > 1.0) did not fail.
      refineMV[ZeroToOne](1.8)
красота
источник

A

Aleksandr Khristenko in Генератор непрочитанных сообщений
Alexander Kladov
красота
scala> val r2: String Refined Regex = "(a|b"
<console>:38: error: Regex predicate failed: Unclosed group near index 4
вот тоже как пример =)
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
чем это лучше условного трейта, абстрактного класса или вообще интерфейса с фабрикой типа ZeroToOne  который делает то же самое?
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
больше бойлерплейта нужно и у тебя это проверяется в компайл тайме(в случае с типами)
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
а если это не известно в компайл тайме?
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
ну как неизвестно
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
ну так, много ли надо валидировать всякой херни из компайл-тайм баундари?
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
у тебя тип нужный не создастся и будет рантайм еррор
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
насколько я понимаю
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
а уже внутри системы ты уверен что у тебя всё четко работает
источник

A

Aleksandr Khristenko in Генератор непрочитанных сообщений
Dmitriy Tkachenko
чем это лучше условного трейта, абстрактного класса или вообще интерфейса с фабрикой типа ZeroToOne  который делает то же самое?
Тем что ты на лету собираешь нужный тип из комбинаторов. И получаешь сразу валидацию.
источник

A

Aleksandr Khristenko in Генератор непрочитанных сообщений
Dmitriy Tkachenko
а если это не известно в компайл тайме?
Эти типы и в рантайме работают.
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Aleksandr Khristenko
Тем что ты на лету собираешь нужный тип из комбинаторов. И получаешь сразу валидацию.
ну т.е. кроме сахара больше ничего)
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
php это сахар для Си
источник