Slide 1

Slide 1 text

let's use Eff ~first step~

Slide 2

Slide 2 text

ࠓ೔͸ ΄Μͷ͞ΘΓ͚ͩͰ͢

Slide 3

Slide 3 text

༻ޠͷઆ໌ • Monad Transformer • Extensible effect (use FreeMonad) • ˒Freer effects (use FreerMonad, Efficient Freer) • ࠓճಋೖ͢Δͷ͸Freer effectsɻ͜·͍࿩͸ผͰࢿྉ࡞ͬͯ෦ձͰͰ΋࿩͠·͢ɻ

Slide 4

Slide 4 text

effͰͳʹ͕͍ͨ͠ͷ͔ • DSLΛ࡞ͬͯͦΕΛ߹੒͍ͨ͠ɻ • DSL͸ӳޠαϓϦDSLతͳ୯ҐͰ࡞ΔͱυϝΠϯ͕Ͱ͔͗ͯ͋͢·Γҙຯ͕ͳ͍ • ࡉ͔͍୯ҐͰDSLΛ࡞ΓɺͦΕΛUseCaseͰ߹੒͢Ε͹υϝΠϯ͕๲Β·ͳ͍ • DSLΛ࡞Δ·Ͱ΋ͳ͍ࡉ͔ͳEffect΋߹੒͍ͨ͠ • zipkinͰͷτϨʔε΍ॲཧͷϕϯνϚʔΫ౳ɺΞϓϦέʔγϣϯίʔυ΁ͷมߋ͕ඞཁͳٕज़Ҋ݅Λ͢͹΍ ҆͘શʹߦ͏͜ͱ͕Ͱ͖Δɻ • ※͜͜Ͱ͍͏DSL͸શͯEDSLͰ͢ɻ

Slide 5

Slide 5 text

Ͳ͏มΘΔͷ͔ SecondaryAdapter૚ UseCase૚ Domain૚ Application૚ ※ґଘੑٯసޙͷਤͰ͢ ·ͣ͸͜͜ʹDSL,InterpreterΛ ಋೖ͢Δɻ Lib૚ ࢖͍·Θ͠Մೳͳ෦඼͸͜͜΁

Slide 6

Slide 6 text

ίʔυͷΠϝʔδ

Slide 7

Slide 7 text

DSL • ͜Μͳײ͡ͷܕ(ADT)͕Ͱ͖·͢ɻ • store,find,delete,exists,clear͸Monad Stack΁ૢ࡞ΛੵΉεϚʔτίϯετϥΫλͰ͢ɻҰݟ೉ͦ͠͏Ͱ͕࢖͏ͱ͖͸؆୯ͳͷͰ҆͝৺Λ(ޙड़)

Slide 8

Slide 8 text

Interpreter • ఆٛͨ͠ADTΛύλʔϯϚονͯ͠ॲཧΛ͢Δɻ • ͜͜Ͱ΋৭ΜͳEffectΛ߹੒͢Δ͜ͱ͕Ͱ͖Δɻ

Slide 9

Slide 9 text

࣮ߦ • InterpreterͷςετΛషͬͯΈΔ • ͜ͷςετ͸௨Γ·͢ɻ • CacheIOͷதͰ͸writer,reader,either,taskΛ߹੒͍ͯ͠Δͷ ʹɺprogram಺Ͱ͸΄ͱΜͲҙࣝ͠ͳ͍ͰOK • ࣮ߦ࣌ʹͲͷEffectΛ͍ࠞͥͯΔ͔͚ͩڭ͑ͯ͋͛ͳ͍ͱ͍ ͚ͳ͍͕ɺࡉ͔͘ҙࣝ͠ͳ͍ͰॅΉΑ͏ʹ͢Δ༧ఆ (CacheIO,TwilioIOͷελοΫΛ͕ͬͪΌΜͯ͜͠Θͨͩ͢ ͚ɺ͘Β͍ͷཻ౓ɻ

Slide 10

Slide 10 text

΋͏গ͠༡ΜͰΈΑ͏ • ಠࣗఆٛͷDSLͱ͸ผͰtaskܕͱUnitܕ΋ࠞͥͯΈΔɻ • ͜Ε΋ී௨ʹ௨Δɻ • ܕ߹ΘͤήʔϜ͕΋ͷ͘͢͝γϯϓϧʹͳ͍ͬͯΔͷ͕͓Θ͔Γ͍͚ͨͩΔͩΖ͏͔ɾɾɾɾɾ • sequence΋Eff.SequenceAͰ༻ҙ͞Ε͍ͯΔɻࠓ࢖ͬͯΔ΋ͷ͸Χόʔ͍ͯ͠Δɻ

Slide 11

Slide 11 text

࢒Γ࡞ۀήʔ͜ͳͤ͹ PRͰΔͷͰ΋͏ͪΐ͍͓଴ͪΛ