Size: a a a

Compiler Development

2020 January 28

K

Kir in Compiler Development
Что технически все инстансы либо должны быть объявлены "одновременно", либо входить в сигнатуры своих контейнеров
источник

А

Алексей in Compiler Development
понятное дело, что в одном модуле не может быть два инстанса для одного типа, иначе будет плохо
источник

AT

Alexander Tchitchigin in Compiler Development
Алексей
понятное дело, что в одном модуле не может быть два инстанса для одного типа, иначе будет плохо
Когерентность - глобальное свойство, в этом весь пафос и удобство.
источник

AT

Alexander Tchitchigin in Compiler Development
Неудобства тоже бывают.
источник

А

Алексей in Compiler Development
Alexander Tchitchigin
Когерентность - глобальное свойство, в этом весь пафос и удобство.
эммм, а как оно обеспечивается то?
источник

AT

Alexander Tchitchigin in Compiler Development
Но с некогерентными инстансами это уже не классы типов. Не то, что было описано в основополагающей статье.
источник

K

Kir in Compiler Development
Фокус в том, что в хаскелле нельзя запретить экспорт инстанса. Они автоматически утекают в туда, куда модуль импортируется.
источник

AT

Alexander Tchitchigin in Compiler Development
Алексей
эммм, а как оно обеспечивается то?
Orphan rules.
источник

K

Kir in Compiler Development
И это сделано как раз для того, чтобы не было возможности выстрелить в ногу себе
источник

А

Алексей in Compiler Development
ну вот если в одном модуле импортируется один инстанс, в другом другой
источник

А

Алексей in Compiler Development
то в чём собственно проблема?
источник

K

Kir in Compiler Development
Т.е., инстанс должен быть либо в модуле, где объявлен тип, либо в модуле, где объявлен класс
источник

AV

Alexander Vershilov in Compiler Development
Если они оба импортируются в третий даже если косвенно, то компилятор ругнётся
источник

K

Kir in Compiler Development
Иначе - варнинг
источник

А

Алексей in Compiler Development
аа
источник

А

Алексей in Compiler Development
понял, спасибо
источник

AV

Alexander Vershilov in Compiler Development
Но сделать это можно только с warning-ом и orphan instance
источник

AT

Alexander Tchitchigin in Compiler Development
Алексей
то в чём собственно проблема?
О! Это очень прикольная тема! 😄
Интересно начинается, когда третий модуль пытается скомбинировать данные или функции из обоих предыдущих, когда они используют разные инстансы
источник

K

Kir in Compiler Development
Особенно весело, если оба модуля - third party, причём оба нужны
источник

AT

Alexander Tchitchigin in Compiler Development
Kir
Особенно весело, если оба модуля - third party, причём оба нужны
Особенно весело - это когда компилятор молча даёт тебе это сделать, но поведение получается какое попало и обеспечивает недели увлекательного дебага. 😄
источник