Настройки по умолчанию для режима Haskell в порядке?

Я изучаю Haskell, достаточно правильно, из книги " Learn You a Haskell". Вплоть до раздела "Охранники" ни один из примеров кода не был смещен, и мне интересно, как мне правильно сделать отступ для моего кода на Haskell в будущем.

Книга выравнивает защитные линии в bmiTell функция с четырьмя пробелами:

bmiTell :: (RealFloat a) => a -> String
bmiTell bmi
    | bmi <= 18.5 = "You're underweight, you emo, you!"
    | bmi <= 25.0 = "You're supposedly normal. Pffft, I bet you're ugly!"
    | bmi <= 30.0 = "You're fat! Lose some weight, fatty!"
    | otherwise   = "You're a whale, congratulations!"

Используя настройки отступа по умолчанию в режиме Haskell, я могу переключаться между нулевыми пробелами (что дает ошибку компиляции) и двумя пробелами (что, кажется, работает нормально) с помощью TAB и S-TAB:

bmiTell :: (RealFloat a) => a -> String
bmiTell bmi
  | bmi <= 18.5 = "You're underweight, you emo, you!"
  | bmi <= 25.0 = "You're supposedly normal. Pffft, I bet you're ugly!"
  | bmi <= 30.0 = "You're fat! Lose some weight, fatty!"
  | otherwise = "You're a whale, congratulations!"

Документы создают впечатление, что мне не нужно ничего делать в моей конфигурации Emacs, чтобы получить рекомендуемые настройки отступов, но после небольшого поиска в Google я не смог найти никаких примеров кода с отступом в два пробела. Поиск по "Руководству по стилю Haskell" приводит к этому, что рекомендует использовать отступы в четыре пробела, как в книге.

Соответствует ли стандартное поведение отступов в режиме Haskell тому, как люди обычно форматируют свой код на Haskell? Если нет, то как мне изменить конфигурацию Emacs, чтобы она соответствовала самой популярной схеме отступов?

Редактировать: По-видимому, я был не прав относительно отступа в предыдущих примерах. Первое использование if заявление с отступом, как это:

doubleSmallNumber x = if x > 100
                        then x
                        else x*2

Но я не могу получить что-то похожее, используя TAB и S-TAB в моей текущей настройке.

1 ответ

Вы можете посмотреть на некоторые крупные проекты, разработанные в haskell, как parsec. В случае parsec кажется, что они используют четыре пробела для охранников.

Вот то, что я нашел полезным и включен в мой init.el файл (или аналогичный), чтобы заставить haskell-mode использовать четыре пробела на вкладке.

(defun haskell-setup ()
    (make-local-variable 'tab-stop-list)
    (setq tab-stop-list (number-sequence 0 120 4))
    (setq indent-line-function 'tab-to-tab-stop)
    (setq haskell-indent-spaces 4))

(add-hook 'haskell-mode-hook 'haskell-setup)
Другие вопросы по тегам