Während ich nicht im Designkomitee war, bin ich der Meinung, dass die Datensatzsyntax so gestaltet wurde, dass sie mit der Listensyntax übereinstimmt. Die Modul-Exportsyntax verwendet ebenfalls Kommas. Der einzige wirkliche Ort, an dem das Layout verwendet wird, sind Deklarationen der obersten Ebene, wobei Klauseln und Do-Notation.
Darüber hinaus gegeben
data Foo = Foo {bar :: Int, baz :: Int}
Schreiben
fnord x = x { bar = 4 }
ohne die geschweiften Klammern würde mit dem Rest der Syntax kollidieren und Layout verwenden, wie
fnord x = x
bar = 4
würde die Syntax ziemlich spröde machen. Fügen Sie ein "wo" an der falschen Stelle hinzu und Ihr Code bedeutet etwas völlig anderes.
Wenn Sie mit dem Stand der Aufzeichnungen in Haskell nicht zufrieden sind (und damit nicht allein wären), empfehle ich Ihnen, sich fclabels oder sogar ausgefeilte Typklassen - Hackery wie HList oder Grapefruit-Aufzeichnungen anzusehen (die beiden letzteren sind es nicht für schwache Nerven, aber auch wahnsinnig mächtig)
Mit fclabels können Sie schreiben (yay pointfree)
fnord = setL bar 4
ebenso gut wie
getBar = getL bar
obendrein ist es die eigentliche Existenzberechtigung, die Labels komponiert:
data Person = Person { _place :: Place, ... }
data Place = Place { _city :: String, ... }
moveToAmsterdam :: Person -> Person
moveToAmsterdam = setL (city . place) "Amsterdam"