Использование GHC API для пробной компиляции кода

Я работаю над довольно простым текстовым редактором для Haskell, и я хотел бы иметь возможность выделять статические ошибки в коде, когда пользователь нажимает «проверить».

Есть ли способ использовать GHC-API для «пробной» компиляции файла haskell без его фактической компиляции? Я хотел бы иметь возможность взять строку и выполнить все проверки нормальной компиляции, но без вывода. GHC-API был бы идеальным, потому что тогда мне не пришлось бы анализировать вывод командной строки из GHC, чтобы выделять ошибки и тому подобное.

Кроме того, можно ли сделать эту проверку строки, а не файла? (Если нет, я могу просто записать его во временный файл, что не очень эффективно, но сработает).

Если это возможно, не могли бы вы предоставить или указать мне пример, как это сделать?

Этот вопрос задает то же самое , но это было три года назад, когда ответ был «GHC-API новый, и хорошей документации пока нет». Так что я надеюсь, что статус изменился.

РЕДАКТИРОВАТЬ: ограничение «пробного запуска» связано с тем, что я делаю это в веб-настройке, где компиляция происходит на стороне сервера, поэтому я хотел бы избежать ненужных операций чтения/записи диска каждый раз, когда пользователь нажимает «проверить». Исполняемый файл в любом случае будет просто выброшен, пока у них не будет версии, готовой к запуску.


person jmite    schedule 17.12.2013    source источник
comment
Я бы счел добавленной функцией возможность аннотировать обе ошибки и получить работающий исполняемый файл из моей IDE, но это только я :)   -  person jamshidh    schedule 17.12.2013
comment
Это немного сложнее. Я делаю что-то на основе браузера, где они пишут свой код в редакторе, и он сохраняется в базе данных. Я пока не могу разглашать слишком много, но это не столько IDE, сколько проект, в котором пользователи отправляют код, который запускается на стороне сервера. (SafeHaskell делает это красиво и безопасно.) Итак, я думаю, было бы достаточно скомпилировать его и просто выбросить исполняемый файл, но это кажется дополнительным накладным расходом, особенно для серверного приложения, которое может запускать несколько компиляций одновременно.   -  person jmite    schedule 17.12.2013
comment
Взгляните на ghc-мод. Он предназначен именно для этого   -  person Daniel Gratzer    schedule 17.12.2013
comment
Добавьте это как ответ, и я приму это. Как раз то, что я искал!   -  person jmite    schedule 17.12.2013


Ответы (1)


Просто чтобы перейти к ответу, он уже существует как ghc-mod, вот < href="http://www.mew.org/~kazu/proj/ghc-mod/en/" rel="nofollow">домашняя страница. У него уже есть интерфейсы для Emacs, Sublime и Vim, поэтому, если вам нужны примеры того, как его использовать, их предостаточно. По сути, ghc-mod — это именно то, что вам нужно, оболочка вокруг GHC API, предназначенная для редакторов.

person Daniel Gratzer    schedule 17.12.2013