Помнит, x.type != Int, это тип конкретной переменной x, которая в скоупе:
scala> val x = 15
val x: Int = 15
scala> val y: x.type = x
val y: x.type = 15
scala> val y: x.type = 15
^
error: type mismatch;
found : Int(15)
required: x.type
Олсо, поменял местами x и y в when, код всё ещё компилируется. Ерунда какая-то.
разумеется, компилируется, ведь Lte это просто кастомный класс в сниппете. Он скомпилируется даже если назовете его Unicorn. Могу переложить в пакет Prelude, если так будет лучше :)
Тут ключевой момент вот в чём. Его тип может зависеть от соответствующих значений? Ну, чтобы тип имплиситного параметра указывал на то, что это именно свидетельство того, что x меньше y?
Я думаю, элегантного решения ни во 2, ни в 3 Scala действительно нет
Какой именно проверки? Есть пример на каком-то реальном языке? В Scala тоже можно потребовать какой-нибудь имлиситный параметр и создавать его в if'e :)
Добавить перегруженные методы для refined типа можно, через обычные extension methods, сильно специфического для Refined ничего в этом плане нет, кроме "поднятия" обернутого типа Зависимые типы в Scala есть, поэтому разницу двух NonNegatives на этапе компиляции сделать можно, если это литералы (значения известны также на этапе компиляции) Refined это сторонняя библиотека и в плане использования типов ничем не отличается от любых других типов, будь то в кейс или обычных классах и полях
Недвижимость вообще сложно подделать, а драгоценности как раз из тех объектов, когда «её потом продать, нужно быть текушим владельцем подлинной» экономически выгодно :) Но суть я понял, спасибо
Вопрос в том, как сообщить (читай заставить) покупателю об этом условии. Если рассматривается только утопичный сценарий, когда государство котирует блокчейн и все расплачиваются криптой, то вопрос снимаю :)
Можно возразить: а почему бы не сшить подделку с серийным номером 349587? Можно поступить и так, но чтобы её потом продать, нужно быть текушим владельцем подлинной сумки, что не имеет никакого экономического смысла, если вы торгуете сумками.
Тут не понял, почему никакого? Заказываем у производителя одну копию оригинального товара, чтобы за нами закрепился серийный номер, а дальше штампуем подделки с тем же номером и продаем
Господа, простите за оффтоп, но можете подсказать, что сейчас в дистрибутивах/DE с поддержкой ретины? Особенно интересует Cinnamon, последний раз когда ставил Mint, необходим был микроскоп, и решить эту проблему глобально помогала только магия с xrandr, которая растягивала разрешение 1366x768 на ретину, что тоже выглядело не ахти
https://scastie.scala-lang.org/yqOOLQ3aS2SsQsDlsKsjVQ
переполнение стека исправлять не буду, я обошелся Scala 2 :)
А для Int'ов? Я посмотрел реализацию LTE в Idris и, кажется, придумал как сделать то же самое в Scala 3 (через https://dotty.epfl.ch/docs/reference/new-types/match-types.html)
Но тогда мне придется писать еще свою реализацию Nat, а я, право, ленивый
Для этого его достаточно положить в [стандартную] библиотеку, в Idris'е же оно не из вакуума появляется
Помнит, x.type != Int, это тип конкретной переменной x, которая в скоупе:
тип переменной х
разумеется, компилируется, ведь Lte это просто кастомный класс в сниппете. Он скомпилируется даже если назовете его Unicorn. Могу переложить в пакет Prelude, если так будет лучше :)
Из зала подсказали :)
https://scastie.scala-lang.org/jDwimqoSTHqoAk1D6wse2g
Я думаю, элегантного решения ни во 2, ни в 3 Scala действительно нет
Какой именно проверки? Есть пример на каком-то реальном языке? В Scala тоже можно потребовать какой-нибудь имлиситный параметр и создавать его в if'e :)
Каким образом? Вот я ввел с консоли два NonNegative, как ваш код вернет NonNegative для x - y?
Добавить перегруженные методы для refined типа можно, через обычные extension methods, сильно специфического для Refined ничего в этом плане нет, кроме "поднятия" обернутого типа
Зависимые типы в Scala есть, поэтому разницу двух NonNegatives на этапе компиляции сделать можно, если это литералы (значения известны также на этапе компиляции)
Refined это сторонняя библиотека и в плане использования типов ничем не отличается от любых других типов, будь то в кейс или обычных классах и полях
Для этого вы можете использовать паттерн Smart Constructor (https://medium.com/@supermanue/smart-constructors-in-scala-fa5a03e25326) совместно с Refined
Тут не понял, почему никакого? Заказываем у производителя одну копию оригинального товара, чтобы за нами закрепился серийный номер, а дальше штампуем подделки с тем же номером и продаем
В разработанной вами системе я бы постоянно затаривался товарами со стоимостью <= 24 руб)