Я хотел бы знать, как вывести принуждения (неявные преобразования a.k.a.) во время вывода типа. Я использую схему вывода типа, описанную в Top Quality Type Error Messages Бастианом Хереном, но я бы предположил, что общая идея, вероятно, одинакова во всех подходах Хиндли-Милнера-Эска.Как вывести принуждения?
Похоже, что принуждение можно рассматривать как форму перегрузки, но подход перегрузки, описанный в этой статье, не рассматривает (по крайней мере, не так, как я мог) перегрузку на основе требований, тип, который является обязательным для принуждения. Я также обеспокоен тем, что такой подход может затруднить уделение приоритета принуждению личности, а также уважение транзитивного закрытия коэрцитивности. Я могу видеть, как сахарное соединение имеет каждое принуждаемое выражение, скажем e, чтобы принудить (e), но сжимая его на принуждение (принуждение (принуждение (...) (e) ...))) для некоторой глубины к максимальному вложению принуждений кажется глупым, а также ограничивает отношение коэрцитивности к чему-то с конечным транзитивным замыканием, глубина которого не зависит от контекста, который кажется (необязательно?) ограничительным.
В разъяснении, я имел в виду, как можно указать, что часть выражения типа компилятора обнаруживает, что касты должны быть * неявно * преобразованы, скажем, из int для float. – 2008-09-16 17:21:05