Size: a a a

Scala User Group

2020 July 29

AO

Artem Ohanjanyan in Scala User Group
Mikhail
Нет, match работает по сравнению + unapply. По конструкторам он не работает
ок, сейчас сделаю пример
источник

M

Mikhail in Scala User Group
Artem Ohanjanyan
Haskell вот понимает, что если туда приходит ConfigEnv, то те типы обязательно одинаковые
Но у тебя в функцию приходит Config[Env,A] - и на этапе компиляции нельзя доказать, что там будет ConfigEnv
источник

AO

Artem Ohanjanyan in Scala User Group
Mikhail
Но у тебя в функцию приходит Config[Env,A] - и на этапе компиляции нельзя доказать, что там будет ConfigEnv
а почему вариант с case _: ConfigEnv[_] работает?
источник

AO

Artem Ohanjanyan in Scala User Group
Ну и Haskell с таким доказательством справляется. Есть какая-то причина, по которой Scala не может?
источник

M

Mikhail in Scala User Group
Artem Ohanjanyan
а почему вариант с case _: ConfigEnv[_] работает?
Потому, что это райнтайм проверка и ты как человек делаешь вывод, что если оно является инстансом класса ConfigEnv и одновременно при этом является чайлдом Config[Env, _] - то, следовательно с учетом входящих там гарантированно будет Config[Env,Env] и Env = A, но это твой логический вывод, а не компилятора или рантайма и тебе нужен будет каст
источник

AO

Artem Ohanjanyan in Scala User Group
Mikhail
Потому, что это райнтайм проверка и ты как человек делаешь вывод, что если оно является инстансом класса ConfigEnv и одновременно при этом является чайлдом Config[Env, _] - то, следовательно с учетом входящих там гарантированно будет Config[Env,Env] и Env = A, но это твой логический вывод, а не компилятора или рантайма и тебе нужен будет каст
так компилятор же проверяет, что в том случае тип будет ConfigEnv, нет?
источник

M

Mikhail in Scala User Group
Artem Ohanjanyan
так компилятор же проверяет, что в том случае тип будет ConfigEnv, нет?
нет, не проверяет. матч - рантайм проверки
источник

AO

Artem Ohanjanyan in Scala User Group
стирается же то, что внутри [], сам ConfigEnv остаётся
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Artem Ohanjanyan
Ну и Haskell с таким доказательством справляется. Есть какая-то причина, по которой Scala не может?
Причина есть, почему иногда скала не выводит то, что выводит хаскель — в скале есть сабтайпинг
источник

ΛВ

Λнтон Войцишевский... in Scala User Group
Может, в текущем вопросе другие причины, но это одна из подобных, я мимопробегал
источник

AO

Artem Ohanjanyan in Scala User Group
ну я знаю, что это часто мешает выводу чего-нибудь, но как это мешает чему-то именно тут, я пока не понял
источник

M

Mikhail in Scala User Group
Λнтон Войцишевский
Может, в текущем вопросе другие причины, но это одна из подобных, я мимопробегал
Вобще мимо. Просто в скале подобная логика проверки не реализована - вот и все.
источник

M

Mikhail in Scala User Group
Artem Ohanjanyan
ну я знаю, что это часто мешает выводу чего-нибудь, но как это мешает чему-то именно тут, я пока не понял
Скала не является хаскелем. Это свой компилятор, со своим набором реализованных и не реализованных проверок-выводов и т.д.
источник

AO

Artem Ohanjanyan in Scala User Group
Mikhail
нет, не проверяет. матч - рантайм проверки
в общем, вроде предложеный вариант делает то, что мне нужно
https://scastie.scala-lang.org/usFEsVdISh2AmLeKwPcizw
источник

PM

Paveλ M in Scala User Group
Artem Ohanjanyan
стирается же то, что внутри [], сам ConfigEnv остаётся
cчитайте, что это особенность синтаксиса
источник

PM

Paveλ M in Scala User Group
[_] какбэ намекает, что в этом месте тип, которым параметризован ConfigEnv, уже недоступен
источник

AO

Artem Ohanjanyan in Scala User Group
да, это я понял, я просто не понял, что мне хотели сказать про то, что типы стираются, и как мне это должно помешать
источник

PM

Paveλ M in Scala User Group
вообще в эту дырку можно чо угодно написать, любой тип. компилятор даст ворнинг, но код в рантайме не сфейлится.
источник

AO

Artem Ohanjanyan in Scala User Group
мне там никакая проверка вроде бы не нужна, мне достаточно того, что компилятор догадывается, что Env=A
источник

AO

Artem Ohanjanyan in Scala User Group
ну или не знаю, что он там себе решает внутри, но код компилирует
источник