generated at
RecordDotSyntax
HaskellのRecordで、PureScriptのRecordのように hoge.x でアクセスできるなど
RecordDotSyntaxはproposal時の名前で、
OverloadedRecordDotOverloadedRecordUpdateという拡張名で入った




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


ref
hs
data 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が既にあるのでそんなに気にすることないかもしれない
こんな感じになる
aa
f . g関数合成
f. g関数合成
f .gsyntax error
f.gfield access
試してないし、プロポーザルを真面目に読んだわけじゃないので合っているか知らんmrsekut
こうやって見ると確かにちょっとむずかしいかもしれない
実際、関数合成を f.g のようにスペースなしで書いているコードたまに見かけるしmrsekut



関連

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