Slide 1

Slide 1 text

Record Dot Syntax ͷ͋Ε͜Ε By lotz
 2019/12/11 ୈ2ճGHCษڧձ @ IIJ-II

Slide 2

Slide 2 text

RecordDotSyntax https://github.com/shayne-fletcher-da/ghc-proposals/blob/record-dot-syntax/proposals/0000-record-dot-syntax.md#motivation

Slide 3

Slide 3 text

RecordDotSyntaxͷجຊ https://github.com/shayne-fletcher-da/ghc-proposals/blob/record-dot-syntax/proposals/0000-record-dot-syntax.md#recorddotsyntax-language-extension

Slide 4

Slide 4 text

RecordDotSyntaxͷ೿ੜߏจ https://github.com/shayne-fletcher-da/ghc-proposals/blob/record-dot-syntax/proposals/0000-record-dot-syntax.md#recorddotsyntax-language-extension

Slide 5

Slide 5 text

Recordվળͷ্ʹ͋Δ ()$֦ு1SPQPTBM ()$7FSTJPO %VQMJDBUF3FDPSE'JFMET 0WFSMPBEFE-BCFMT 0WFSMPBEFE3FDPSE'JFMET "EETFU'JFMEUP)BT'JFME /P'JFME4FMFDUPST "DDFQUFE 3FDPSE%PU4ZOUBY /&8

Slide 6

Slide 6 text

DAMLͰͷ࣮੷͋Γ • DAML͸Haskell/ScalaͰ։ൃ͞Ε͍ͯΔɺ
 εϚʔτίϯτϥΫτهड़ݴޠ • DAMLͷ։ൃʹ͓͍ͯGHC Pluginsͱ͍͏ܗͰ RecordDotSyntaxͱ΄΅ಉ͡ػೳ͕࢖ΘΕ͍ͯΔ

Slide 7

Slide 7 text

ఏҊͯ͠Δͷ΋DAMLͷਓ https://github.com/ghc-proposals/ghc-proposals/pull/282

Slide 8

Slide 8 text

PR΁ͷ൓Ԡ https://github.com/ghc-proposals/ghc-proposals/pull/282#issuecomment-540968106 *TUSPOHMZTVQQPSUUIFEJSFDUJPOPG USBWFMPGUIJTQSPQPTBM

Slide 9

Slide 9 text

PR΁ͷ൓Ԡ 5IFMPTTPGQPMZNPSQIJDVQEBUFJT BIVHFQSPCMFN JNP https://github.com/ghc-proposals/ghc-proposals/pull/282#issuecomment-541111003

Slide 10

Slide 10 text

PR΁ͷ൓Ԡ 5IJTQSPQPTBMJTGVMMPGVUUFSOPOTFOTF https://github.com/ghc-proposals/ghc-proposals/pull/282#issuecomment-541460439

Slide 11

Slide 11 text

> :t (.age) (.age) :: Person -> Int > :t (. age) (. age) :: (Int -> c) -> Person -> c ۭനͷ༗Γແ͠Ͱ͜͜·Ͱҙຯ͕มΘΔͷ͸ ॳ৺ऀʹ͸೉͘͠ͳ͍ʁ

Slide 12

Slide 12 text

ࠓͷεςʔλε https://github.com/ghc-proposals/ghc-proposals/pull/282#issuecomment-559259994 8JUIUIFUIDPNNFOU BGUFSSFBDUJPOTPOUIFJOJUJBM QPTU QBSUJDJQBOUTBOEBUMFBTUQPMMTPGVTFSTFOUJNFOU *EMJLFUPUVSOUIJTPWFSUPUIFDPNNJUUFF

Slide 13

Slide 13 text

ະղܾ໰୊ https://twitter.com/ndm_haskell/status/1190680324495302658

Slide 14

Slide 14 text

͋Ε͜Ε

Slide 15

Slide 15 text

f a.b.c x ͷύʔε f a.foo.bar.baz.quux 12 ͸ f (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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

͜͏͍͏දه͸ແ͍ • ߋ৽ʹؔ͢Δߏจ • 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

Slide 18

Slide 18 text

Ҏ্