2016-05-12 11 views
3

Я изучаю Haskell через, надлежащим образом, книгу Learn You a Haskell. До section on guards ни один из примеров кода не был отступом, и мне интересно, как я должен правильно отложить мой код Haskell в будущем.Настройка по умолчанию в Haskell Mode по умолчанию OK?

В книге отступы защитных линий в функции 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!" 

Using Haskell Mode's default indentation settings, я могу переключаться между нулевыми пространствами (что дает ошибку компиляции) и два пространства (которые, кажется, работает хорошо) используя 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!" 

The docs сделать это, кажется, что я не должен нуждаться в т o делать что-либо в моей конфигурации Emacs, чтобы получить рекомендуемые настройки отступов, но после небольшого Googling я не смог найти примеры кода с двухпозиционным отступом. Поиск «Руководства по стилю Haskell» дает this, который рекомендует использовать четырехпозиционный отступ, используемый в книге.

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

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

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

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

+2

Установите значение 4: '(setq haskell-indent-spaces 4)'. – Sibi

+0

@Sibi: обратите внимание, что он доступен как [переменная настройки] (https://www.gnu.org/software/emacs/manual/html_node/emacs/Easy-Customization.html), поэтому вы можете использовать инфраструктуру настройки вместо устанавливая его непосредственно через 'setq'. – Cactus

+2

Я очень предпочитаю два пространства, потому что я склоняюсь к горизонтальному пространству. Я также отбрасываю ключевое слово 'where' два пробела и привязки в его статье два других. – dfeuer

ответ

1

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

+1

Спасибо, но это не полностью отвечает на мой вопрос.Как мне изменить конфигурацию Emacs, чтобы она соответствовала этой схеме отступов? –