2016-05-12 8 views
3

私は十分に、Learn You a Haskell本を通してハスケルを学んでいます。 section on guardsまでは、コード例のどれもインデントされていませんでした。今後のHaskellコードを正しくインデントする方法については疑問に思っています。Haskell Modeのデフォルトのインデント設定はOKですか?

ブックインデント4つのスペースと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、私は(コンパイルエラーを与える)ゼロスペースを切り替えることができますし、(正常に動作するようです)二つの空間TABS-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の設定では、インデントの推奨設定を得るために何かするが、ちょっとしたグーグルの後には、2つのスペースインデントを持つコード例を見つけることができなかった。 "Haskell style guide"を検索するとthisとなり、ブックで使用されているような4つのインデントが推奨されます。

Haskellモードのデフォルトの字下げ動作は、一般的にHaskellコードを書式設定する方法と一致していますか?もしそうでなければ、最も普及しているインデントスキームと一貫するようにEmacsの設定をどのように変更すればよいですか?

編集:明らかに、前の例ではインデントについて間違っていました。 first use of an if statementは次のようにインデントされています

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

しかし、私は私の現在の設定でTABS-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

私は非常に2つのスペースを好むので、私は水平なスペースが足りなくなる傾向があります。私はまた、2つのスペースとその節のバインディングを別の2つのキーワードにインデントします。 – dfeuer

答えて

1

haskellで開発されたいくつかの主要なプロジェクトをparsecのように見ることができます。 parsecの場合は、four spaces for guardsを使用しているようです。

+1

ありがとうございますが、これは私の質問に完全に答えていません。このインデントスキームと一致するようにEmacsの設定を変更するにはどうすればよいですか? –

関連する問題