Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

Пакеты haskell-indentation и haskell-indent наиболее популярны:

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

  • повторение имени функции для вас после того, как вы написали подпись типа
  • повторение имени функции для соответствия шаблону
  • для ветвей case

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