конструкторами
data AorB = A | B
data OnlyA = A
так, чтобы значение типа OnlyA всегда было значением типа A тоже. Это ведёт к каким-то неразрешимостям в выводе типов? Есть какой-нибудь наглядный пример, чтобы понять с чем тут будет проблема или статья где об этом почитать?
Мне кажется тут неправильное понимание что значит палочка и конструкторы. Если переписать data X = A | B data Y = A Как data X = AofX | BofX data Y = AofY То иллюзия "одинаковости A" растворяется. Конструкторы не существуют без своего типа. Из вообще можно заменить на функции: withX withAofX withBofX x = ... withY withAofY y = ...
A здесь не тип, а конструктор, то бишь значение. Вот как раз открытые суммы включают сабтайпинг, поэтому в хаскелле их нет. Свойство номинальности - т.е., каждое значение имеет не более 1 most general type вообще позволяет выводить типы, без этого было бы грустно.
В либах-то они есть, и в некоторых даже чёрная магия позволяет inject одну сумму в бОльшую. Но всё это делается руками, и приводит вывод типов в прямо скажем - довольно шаткое состояние
магия сабтайпинг твой вывод типы шатал
Неразмеченные суммы, понятное дело, включают. Но они существенно сильнее: тогда каждое значение может входить в сколько угодно неразмеченных сумм. А тут — только в конечное количество, которые заранее известны
Обсуждают сегодня