Si bien no estaba en el comité de diseño, considero que la sintaxis de los registros fue conformada para ser consistente con la sintaxis de la lista. La sintaxis de exportación del módulo también usa comas, el único lugar real donde se usa el diseño son las declaraciones de nivel superior, donde las cláusulas y la anotación.
Además de eso, dado
data Foo = Foo {bar :: Int, baz :: Int}
escritura
fnord x = x { bar = 4 }
sin las llaves chocarían con el resto de la sintaxis, y usando el diseño, como
fnord x = x
bar = 4
haría la sintaxis bastante frágil. Agregue un "dónde" en el lugar equivocado y su código significa algo completamente diferente.
Si no está satisfecho con el estado de los registros en Haskell (y no estaría solo con eso), le recomiendo que eche un vistazo a las etiquetas o incluso a la elaboración de hackers de clase tipo como HList o registros de toronja (los dos últimos no son para los débiles de corazón, pero también increíblemente poderosos)
fclabels te permitiría escribir (yay pointfree)
fnord = setL bar 4
tanto como
getBar = getL bar
además de su verdadera razón de ser, que es componer etiquetas:
data Person = Person { _place :: Place, ... }
data Place = Place { _city :: String, ... }
moveToAmsterdam :: Person -> Person
moveToAmsterdam = setL (city . place) "Amsterdam"