RecordDotSyntax
RecordDotSyntaxはproposal時の名前で、
けっこう色々な構文拡張が入っているっぽい
でもまあ、実際の利用時はそんなこと気にせずPureScript感覚で使えるはず

hsdata Quarter = Fall | Winter | Spring
data Status = Passed | Failed | Incomplete | Withdrawn
data Taken =
Taken { year :: Int
, term :: Quarter
}
data Class =
Class { result :: Status
, taken :: Taken
}
getResult :: Class -> Status
getResult c = c.result -- get
setResult :: Class -> Status -> Class
setResult c r = c{result = r} -- update
setYearTaken :: Class -> Int -> Class
setYearTaken c y = c{taken.year = y} -- nested update
getResults :: [Class] -> [Status]
getResults = map (.result) -- selector
getTerms :: [Class] -> [Quarter]
getTerms = map (.taken.term) -- nested selector
updateするときって、 c {result = r}
のように c
と {
の間にスペース入れたらダメ?
難しそうな点
既存の関数合成の .
などがあるので、「 .
の周囲の空白の有無」で意味が変わる
でもまあ既にqualifiedの Hoge.hoge
のようなsyntaxが既にあるのでそんなに気にすることないかもしれない
こんな感じになる
aaf . g | 関数合成 |
f. g | 関数合成 |
f .g | syntax error |
f.g | field access |
試してないし、プロポーザルを真面目に読んだわけじゃないので合っているか知らん

こうやって見ると確かにちょっとむずかしいかもしれない
実際、関数合成を
f.g
のようにスペースなしで書いているコードたまに見かけるし

関連
参考
提案時の話などがまとまっている
2019年の資料