Chociaż nie byłem w komisji projektowej, uważam, że składnia rekordu została ukształtowana tak, aby była spójna ze składnią listy. Moduł w składni eksportu również używa przecinków, jedynym prawdziwym miejscem, w którym używany jest układ, są deklaracje najwyższego poziomu, w których są klauzule i notacja.
Na dodatek, biorąc pod uwagę
data Foo = Foo {bar :: Int, baz :: Int}
pisanie
fnord x = x { bar = 4 }
bez nawiasy klamrowe kolidowałyby z resztą składni i przy użyciu układu, jak
fnord x = x
bar = 4
sprawiłoby, że składnia byłaby dość krucha. Dodaj „gdzie” w niewłaściwym miejscu, a kod oznacza coś zupełnie innego.
Jeśli nie jesteś zadowolony ze stanu rekordów w Haskell (i nie byłbyś z tym sam), polecam przyjrzeć się flabels, a nawet wypracować hackery typograficzne, takie jak HList lub rekordy grejpfrutowe (dwa ostatnie nie są dla osób o słabym sercu, ale także niesamowicie potężnych)
fclabels pozwoli ci pisać (yay pointfree)
fnord = setL bar 4
jak również
getBar = getL bar
na dodatek jest to raison d'etre, które tworzy etykiety:
data Person = Person { _place :: Place, ... }
data Place = Place { _city :: String, ... }
moveToAmsterdam :: Person -> Person
moveToAmsterdam = setL (city . place) "Amsterdam"