Каковы сходства и различия между режимами отступов в Haskell для Emacs?

Изучив документацию, я узнал, что Emacs haskell-mode поставляется с тремя различными, взаимоисключающими методами автоматизированного отступа. Они называются haskell-indentation, haskell-indent, а также haskell-simple-indent, Кто-нибудь может объяснить, как эти методы похожи и чем они отличаются? Меня интересуют не только отдельные функции, но и то, является ли один стандартом де-факто или один или два больше не поддерживаются.

3 ответа

Решение

На самом деле, насколько я знаю, спрашивая людей, не существует стандарта де-факто, у людей есть твердое мнение о том, что они предпочитают, но с небольшими конкретными доказательствами, кроме "это работает для меня в большинстве случаев".

haskell-indentation пакет и haskell-indent Пакеты являются самыми популярными:

  • у обоих есть цикл табуляции
  • оба являются сложными кодами
  • у обоих есть множество крайних случаев, когда они ломаются

Каждый из них будет делать правильные вещи в разных случаях, но, опять же, здесь нет ни модульных тестов, ни реального парсера и т. Д., А просто куча особых случаев, о которых подумал автор (ы), поэтому документация и понимание того, как они вести себя в строгом смысле слова редко. haskell-indentation понимает больше Haskell, чем haskell-indent, но многие люди скажут вам, в том числе и мне, что вы проводите много времени, перебирая отступы, чтобы найти нужный.

haskell-simple-indent Пакет не знает Haskell, он знает только о выравнивании столбцов и не имеет цикла табуляции, имеет отступы и деиндентирования. Эту версию я использую из-за вышеупомянутых краевых случаев в предыдущих режимах, которые иногда могут быть довольно отвлекающими.

Я думаю, что с такими библиотеками будет трудно описать их отличия, кроме анекдотических, на данном этапе. Я бы приветствовал некоторые строгие сравнения (хотя время может быть лучше потратить на написание лучшего режима).

simple-indent поддерживается мной. Я не знаю, заинтересованы ли авторы других в обслуживании.

Я считаю, что 3 упомянутых вами режима соответствуют 3 режимам haskell, описанным в этой статье, а именно;

  • haskell-indentation == Tab Cycling
  • haskell-indent == Прямоугольная область
  • haskell-simple-indent == Выравнивание кода

Однако, так как я не уверен на 100%, я вернусь к большему, когда вернусь домой.

haskell-indentation а также haskell-indent обманчиво похожи, оба предлагают циклическое прохождение предложений посредством повторного ввода TAB, что является их главной особенностью IMO.

тем не мение haskell-indent определенно мой любимый, в основном потому, что он предложит некоторые дополнения, которые будут весьма полезны:

  • повторение имени функции после того, как вы написали сигнатуру типа
  • повторение имени функции для сопоставления с образцом
  • трубы для корпусных отводов

Я только недавно переключил среды и пришлось переустанавливать Emacs, и использовал haskell-indentation по ошибке, и мальчик, я скучал по этим. ОТО, вы можете найти некоторые из этих завершений раздражающими; Более того, они не работают в определенных случаях: если ваша функция начинается с подчеркивания или (что еще хуже), если вы отслеживаете птиц.

Другие вопросы по тегам