Ich lerne Haskell, passenderweise, das Learn You a Haskell Buch. Bis zum section on guards wurde keines der Codebeispiele eingerückt, und ich frage mich, wie ich meinen Haskell-Code in Zukunft richtig einrücken sollte.Ist die standardmäßige Einrückungskonfiguration von Haskell Mode OK?
Die Buch Einzüge die Schutzleitungen in der bmiTell
Funktion mit vier Räumen:
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 ich zwischen Null Räumen hin- und herschalten (die einen Übersetzungsfehler gibt) und zwei Räume (die gut zu funktionieren scheint) mit TAB und 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 es scheinen, wie ich t nicht benötigen, sollten o mache alles in meiner Emacs-Konfiguration, um die empfohlenen Einrückungseinstellungen zu erhalten, aber nach einigem Googeln konnte ich keine Code-Beispiele mit zwei Leerzeichen finden. Eine Suche nach "Haskell style guide" liefert this, die vier Leerzeichen Einbuchtung wie in dem Buch verwendet empfiehlt.
Ist das standardmäßige Einrückungsverhalten von Haskell Mode konsistent mit der Formatierung des Haskell-Codes? Wenn nicht, wie sollte ich meine Emacs-Konfiguration ändern, um mit dem beliebtesten Einrückungsschema konsistent zu sein?
Edit: Offenbar war ich falsch über Einzug in den vorherigen Beispielen. Die first use of an if
statement wird wie folgt eingerückt: mit TAB und S-TAB in meinem aktuellen Setup
doubleSmallNumber x = if x > 100
then x
else x*2
Aber ich kann nicht etwas zu bekommen scheint, die so aussieht.
Setzen Sie es auf 4: '(setq haskell-indent-spaces 4)'. – Sibi
@Sibi: Beachten Sie, dass es als [Anpassungsvariable] (https://www.gnu.org/software/emacs/manual/html_node/emacs/Easy-Customization.html) verfügbar ist, sodass Sie das Anpassungsframework anstelle von verwenden können setze es direkt über 'setq'. – Cactus
Ich bevorzuge zwei Räume, weil ich dazu tendiere, den horizontalen Raum zu verlassen. Ich ziehe auch das Schlüsselwort 'where' zwei Leerzeichen und die Bindings in seiner Klausel zwei weitere ein. – dfeuer