Каковы сходства и различия между режимами отступов в 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 Cyclinghaskell-indent
== Прямоугольная областьhaskell-simple-indent
== Выравнивание кода
Однако, так как я не уверен на 100%, я вернусь к большему, когда вернусь домой.
haskell-indentation
а также haskell-indent
обманчиво похожи, оба предлагают циклическое прохождение предложений посредством повторного ввода TAB, что является их главной особенностью IMO.
тем не мение haskell-indent
определенно мой любимый, в основном потому, что он предложит некоторые дополнения, которые будут весьма полезны:
- повторение имени функции после того, как вы написали сигнатуру типа
- повторение имени функции для сопоставления с образцом
- трубы для корпусных отводов
Я только недавно переключил среды и пришлось переустанавливать Emacs, и использовал haskell-indentation
по ошибке, и мальчик, я скучал по этим. ОТО, вы можете найти некоторые из этих завершений раздражающими; Более того, они не работают в определенных случаях: если ваша функция начинается с подчеркивания или (что еще хуже), если вы отслеживаете птиц.