Вдохновленный это reddit обсуждение, мне интересно, есть ли какие-либо технические препятствия на пути подхода "Dr Scheme" чтобы помочь начинающим, когда дело доходит до понимания сообщений об ошибках. Речь идет о печально известном
Prelude> 1 "doesn't"
<interactive>:3:1:
No instance for (Num ([Char] -> t0))
arising from the literal `1'
Possible fix: add an instance declaration for (Num ([Char] -> t0))
In the expression: 1
In the expression: 1 "doesn't"
In an equation for `it': it = 1 "doesn't"
Предположим, что мы должны сделать локальное предположение, что программист не объявит никаких новых экземпляров. Действительно, в Haskell можно пройти долгий путь, взаимодействуя только с классами прелюдии только через deriving
, поэтому это предположение нереально для новичков. При таком предположении вышеупомянутое сообщение об ошибке будет находиться рядом с точкой. Можем ли мы улучшить его? Нам еще нужно выяснить, как много говорить о типе 1
, но мы могли бы быть более прямым в этой проблеме.
Существуют ли другие возможности перефразировать сообщения об ошибках на основе реалистичных упрощающих предположений? Обратите внимание: я задаю вопрос об изменении текста сообщений об ошибках на основе модели опыта программиста: я не рассматриваю локально какие-либо изменения, при которых код считается ошибочным (например, предполагая, что новички будут использовать перегруженные вещи на специализированных типы, устраняющие неоднозначность).
Последующая мысль: содержит ли текст существующих сообщений об ошибках достаточную информацию для поддержки таких преобразований, предполагая, что "файл конфигурации" моделирует учащегося? То есть, может ли предприимчивый хакер реализовать постпроцессор для повышения разборчивости для ghci
, не беспокоя занятых людей в штаб-квартире?