Record Dot Syntax ͷ͋Ε͜ΕBy lotz 2019/12/11 ୈ2ճGHCษڧձ @ IIJ-II
View Slide
RecordDotSyntaxhttps://github.com/shayne-fletcher-da/ghc-proposals/blob/record-dot-syntax/proposals/0000-record-dot-syntax.md#motivation
RecordDotSyntaxͷجຊhttps://github.com/shayne-fletcher-da/ghc-proposals/blob/record-dot-syntax/proposals/0000-record-dot-syntax.md#recorddotsyntax-language-extension
RecordDotSyntaxͷੜߏจhttps://github.com/shayne-fletcher-da/ghc-proposals/blob/record-dot-syntax/proposals/0000-record-dot-syntax.md#recorddotsyntax-language-extension
Recordվળͷ্ʹ͋Δ()$֦ு1SPQPTBM ()$7FSTJPO%VQMJDBUF3FDPSE'JFMET 0WFSMPBEFE-BCFMT 0WFSMPBEFE3FDPSE'JFMET "EETFU'JFMEUP)BT'JFME /P'JFME4FMFDUPST "DDFQUFE3FDPSE%PU4ZOUBY /&8
DAMLͰͷ࣮͋Γ• DAMLHaskell/ScalaͰ։ൃ͞Ε͍ͯΔɺ εϚʔτίϯτϥΫτهड़ݴޠ• DAMLͷ։ൃʹ͓͍ͯGHC Pluginsͱ͍͏ܗͰRecordDotSyntaxͱ΄΅ಉ͡ػೳ͕ΘΕ͍ͯΔ
ఏҊͯ͠ΔͷDAMLͷਓhttps://github.com/ghc-proposals/ghc-proposals/pull/282
PRͷԠhttps://github.com/ghc-proposals/ghc-proposals/pull/282#issuecomment-540968106*TUSPOHMZTVQQPSUUIFEJSFDUJPOPGUSBWFMPGUIJTQSPQPTBM
PRͷԠ5IFMPTTPGQPMZNPSQIJDVQEBUFJTBIVHFQSPCMFN JNPhttps://github.com/ghc-proposals/ghc-proposals/pull/282#issuecomment-541111003
PRͷԠ5IJTQSPQPTBMJTGVMMPGVUUFSOPOTFOTFhttps://github.com/ghc-proposals/ghc-proposals/pull/282#issuecomment-541460439
> :t (.age)(.age) :: Person -> Int> :t (. age)(. age) :: (Int -> c) -> Person -> cۭനͷ༗Γແ͠Ͱ͜͜·Ͱҙຯ͕มΘΔͷॳ৺ऀʹ͘͠ͳ͍ʁ
ࠓͷεςʔλεhttps://github.com/ghc-proposals/ghc-proposals/pull/282#issuecomment-5592599948JUIUIFUIDPNNFOU BGUFSSFBDUJPOTPOUIFJOJUJBMQPTU QBSUJDJQBOUTBOEBUMFBTUQPMMTPGVTFSTFOUJNFOU *EMJLFUPUVSOUIJTPWFSUPUIFDPNNJUUFF
ະղܾhttps://twitter.com/ndm_haskell/status/1190680324495302658
͋Ε͜Ε
f a.b.c x ͷύʔεf a.foo.bar.baz.quux 12f (a.foo.bar.baz.quux) 12ͱධՁ͞ΕΔ((f a).foo.bar.baz.quux) 12Ͱͳ͍https://github.com/shayne-fletcher-da/ghc-proposals/blob/record-dot-syntax/proposals/0000-record-dot-syntax.md#record-selection
Lensʁ• f $ record ^. field ͕ f record.field ͱॻ͚Δ• Lensෳࡶա͗Δ…• Lensͱ໊લۭ͕ؒҟͳΔͷͰҰॹʹ͑Δhttps://github.com/shayne-fletcher-da/ghc-proposals/blob/record-dot-syntax/proposals/0000-record-dot-syntax.md#alternatives-to-this-proposal
͜͏͍͏දهແ͍• ߋ৽ʹؔ͢Δߏจ• a{field * 2}• a{field <- (*2)}• a{field * = 2}• ߋ৽ʹؔ͢ΔηΫγϣϯ• ({a=})• ({a=b})• (.lbl=)https://github.com/shayne-fletcher-da/ghc-proposals/blob/record-dot-syntax/proposals/0000-record-dot-syntax.md#alternatives-within-this-proposal
Ҏ্