Настройки по умолчанию для режима 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)