Хоча я не був у комітеті дизайну, я вважаю, що синтаксис запису формувався так, щоб він відповідав синтаксису списку. У синтаксисі експорту модуля теж використовуються коми, єдине реальне місце, де використовується макет, - це декларації верхнього рівня, де є пропозиції та нотації.
На додаток до цього
data Foo = Foo {bar :: Int, baz :: Int}
написання
fnord x = x { bar = 4 }
без дужок зіткнеться з рештою синтаксису, і з використанням макета, як
fnord x = x
bar = 4
зробив би синтаксис досить крихким. Додайте "де" в неправильному місці, а ваш код означає щось зовсім інше.
Якщо ви не задоволені станом записів у Haskell (і ви б не були на самоті з цим), я рекомендую вам ознайомитись з fclabel або навіть досконалим хакерством типу type, наприклад HList або грейпфрутовими записами (останні два не є для слабкого серця, але й шалено потужного)
fclabels дозволить вам писати (так, pointfree)
fnord = setL bar 4
так само, як
getBar = getL bar
Крім того, це фактичний raison d'etre, який створює етикетки:
data Person = Person { _place :: Place, ... }
data Place = Place { _city :: String, ... }
moveToAmsterdam :: Person -> Person
moveToAmsterdam = setL (city . place) "Amsterdam"