Tasarım komitesinde olmasam da, kayıt sözdiziminin liste sözdizimi ile tutarlı olacak şekilde şekillendiğini düşünüyorum. Modül dışa aktarım sözdizimi de virgül kullanır, mizanpajın kullanıldığı tek gerçek yer, cümle ve gösterimin yapıldığı üst düzey bildirimlerdir.
Bunun üzerine, verilen
data Foo = Foo {bar :: Int, baz :: Int}
yazı
fnord x = x { bar = 4 }
parantez olmadan sözdiziminin geri kalanıyla çakışır ve
fnord x = x
bar = 4
sözdizimini oldukça kırılgan hale getirir. Yanlış yere bir "where" ekleyin ve kodunuz tamamen farklı bir şey anlamına gelir.
Haskell'deki kayıtların durumundan memnun değilseniz (ve bununla yalnız kalmazsanız) , fclabels'e veya HList veya greyfurt kayıtları gibi ayrıntılı tip hackery'e göz atmanızı öneririm (son ikisi kalbin zayıflığı için değil, aynı zamanda inanılmaz derecede güçlü)
fclabels yazmanıza izin verir (yay pointfree)
fnord = setL bar 4
Hem de
getBar = getL bar
Üstelik etiket oluşturan gerçek raison d'etre:
data Person = Person { _place :: Place, ... }
data Place = Place { _city :: String, ... }
moveToAmsterdam :: Person -> Person
moveToAmsterdam = setL (city . place) "Amsterdam"