Bien que je n'étais pas membre du comité de conception, je pense que la syntaxe d'enregistrement a été conçue pour être cohérente avec la syntaxe de liste. La syntaxe d'exportation de module utilise également des virgules, le seul véritable endroit où la disposition est utilisée est les déclarations de niveau supérieur, les clauses where et la notation do.
En plus de cela, étant donné
data Foo = Foo {bar :: Int, baz :: Int}
l'écriture
fnord x = x { bar = 4 }
sans les accolades serait en conflit avec le reste de la syntaxe, et en utilisant la mise en page, comme
fnord x = x
bar = 4
rendrait la syntaxe assez fragile. Ajoutez un "où" au mauvais endroit et votre code signifie quelque chose de complètement différent.
Si vous n'êtes pas satisfait de l'état des enregistrements dans Haskell (et que vous ne seriez pas seul avec cela), je vous recommande de jeter un œil aux fclabels ou même d'élaborer des hackeries de typographie comme HList ou pamplemousse-enregistrements (les deux derniers n'étant pas pour les faibles de cœur, mais aussi incroyablement puissants)
fclabels vous permettrait d'écrire (yay pointfree)
fnord = setL bar 4
aussi bien que
getBar = getL bar
en plus de sa véritable raison d'être, qui compose des étiquettes:
data Person = Person { _place :: Place, ... }
data Place = Place { _city :: String, ... }
moveToAmsterdam :: Person -> Person
moveToAmsterdam = setL (city . place) "Amsterdam"