Mặc dù tôi không tham gia vào thiết kế, tôi nghĩ rằng cú pháp bản ghi được định hình là phù hợp với cú pháp danh sách. Cú pháp xuất mô-đun cũng sử dụng dấu phẩy, nơi thực sự duy nhất sử dụng bố cục là khai báo cấp cao nhất, trong đó các mệnh đề và ký hiệu.
Trên hết, được đưa ra
data Foo = Foo {bar :: Int, baz :: Int}
viết
fnord x = x { bar = 4 }
không có dấu ngoặc nhọn sẽ xung đột với phần còn lại của cú pháp và sử dụng bố cục, như
fnord x = x
bar = 4
sẽ làm cho cú pháp khá giòn. Thêm một "nơi" ở sai vị trí và mã của bạn có nghĩa là một cái gì đó hoàn toàn khác nhau.
Nếu bạn không hài lòng với trạng thái của các bản ghi trong Haskell (và bạn sẽ không đơn độc với điều đó), tôi khuyên bạn nên xem fclabels hoặc thậm chí là các bản hack typeclass phức tạp như HList hoặc bưởi-hồ sơ (hai bản sau không được cho người yếu tim, nhưng cũng cực kỳ mạnh mẽ)
fclabels sẽ cho phép bạn viết (yay pointfree)
fnord = setL bar 4
cũng như
getBar = getL bar
trên đầu trang của nó thực sự là nhà tù, đó là sáng tác nhãn:
data Person = Person { _place :: Place, ... }
data Place = Place { _city :: String, ... }
moveToAmsterdam :: Person -> Person
moveToAmsterdam = setL (city . place) "Amsterdam"