Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
猫とたはむれる
Search
cedretaber
May 15, 2017
Programming
940
2
Share
猫とたはむれる
ScalaのFP用ライブラリ cats の紹介です。
cedretaber
May 15, 2017
More Decks by cedretaber
See All by cedretaber
関数型初心者におすすめしたい "OCaml"
cedretaber
1
1k
3ヶ月間Scalaと付き 合って感じた事 ……という発表を想定していたのですが
cedretaber
3
3.2k
Other Decks in Programming
See All in Programming
「接続」—パフォーマンスチューニングの最後の一手 〜点と点を結ぶ、その一瞬のために〜
kentaroutakeda
4
2.3k
モックわからないマン卒業記 ~振る舞いを起点に見直した、フロントエンドテストにおけるモックの使いどころ~
tasukuwatanabe
3
430
RSAが破られる前に知っておきたい 耐量子計算機暗号(PQC)入門 / Intro to PQC: Preparing for the Post-RSA Era
mackey0225
3
100
Feature Toggle は捨てやすく使おう
gennei
0
390
KagglerがMixSeekを触ってみた
morim
0
360
今年もTECHSCOREブログを書き続けます!
hiraoku101
0
210
Java 21/25 Virtual Threads 소개
debop
0
310
GC言語のWasm化とComponent Modelサポートの実践と課題 - Scalaの場合
tanishiking
0
130
AI時代のシステム設計:ドメインモデルで変更しやすさを守る設計戦略
masuda220
PRO
6
1.1k
夢の無限スパゲッティ製造機 -実装篇- #phpstudy
o0h
PRO
0
180
PHP でエミュレータを自作して Ubuntu を動かそう
m3m0r7
PRO
2
150
「速くなった気がする」をデータで疑う
senleaf24
0
120
Featured
See All Featured
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
80
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
1
1.5k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
110
The untapped power of vector embeddings
frankvandijk
2
1.6k
YesSQL, Process and Tooling at Scale
rocio
174
15k
How to Talk to Developers About Accessibility
jct
2
170
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
2.6k
Exploring anti-patterns in Rails
aemeredith
2
300
Are puppies a ranking factor?
jonoalderson
1
3.2k
We Are The Robots
honzajavorek
0
210
Code Review Best Practice
trishagee
74
20k
Transcript
ೣͱͨΉΕΔ @cedretaber
Twitter / Github @cedretaber ͓ࣄ Scala TypeScript झຯ Ruby Erlang
/ Elixir F# Dݴޠ
cats ࠓճ͝հ͢Δͷtypelevel / cats 4DBMBͰ'1Λߦ͏ҝͷϥΠϒϥϦ 4DBMB[ͱ͔ͷϑϨϯζ
Why cats? ͍͍͢σʔλܕ͕ ἧ͍ͬͯΔ 4DBMBඪ४ͷσʔλܕʹ ศརͳؔΛೖ͠ ͯ͘ΕΔ ιʔε͕ಡΈ͘͢ݟ ָ͍͍ͯͯ͠
NonEmptyList
ʮઈରʹۭ͡Όͳ͍ࣄ͕อূ͞ΕͨʯϦετɻ ʮ͜͜Ͱͬͯ͘ΔϦετۭ͡Όͳ͍ʯͬͯ࣌ʹ ͏ɻ
None
Ϧετͱͷ૬ޓม /PO&NQUZ-JTUΛ͍͍ͨ໘-JTUΛ͍͍ͨ ໘ʹแؚ͞Ε͍ͯΔͣͳͷͰɺϦετͱͷ૬ޓม ଟ༻͢Δɻ
None
ͦͷଞͷϝιου /PO&NQUZ-JTUී௨ͷϦετͷϝιου͕֓Ͷ࣮ ͞Ε͍ͯΔɻ ·ͨɺ4FNJHSPVQ,ɺ5SBWFSTFɺ.POBEͳͲͷΠ ϯελϯεͳͷͰɺศརͳϝιουଟ͑͘Δ ʢۭͷঢ়ଶ͕ଘࡏ͠ͳ͍ͨΊɺϞϊΠυͰͳ͘ ܈ͳͷͰҙɻʣ
None
None
None
ه NonEmptyVector NonEmptyStream ͋Δɻ
Validated
ʮ-FGUΛੵ͢Δ&JUIFSʯ ໊લͷ௨ΓɺόϦσʔγϣϯΛ͔͚Δ࣌ʹॏๅ͢ Δɻ
ྫ ϢʔβొͷॲཧΛߟ͑Δɻ Ϣʔβ*%ॏෳෆՄɺύεϫʔυจࣈҎ্ɺΈ ͍ͨͳͷ͕݅͋Δͱ͢Δɻ
None
͜ͷ࣮ͩͱɺ*%ͱύεϫʔυͷ྆ํʹ͕͋Δ ߹*%ͷΤϥʔ͔͠ฦΒͳ͍ɻ όϦσʔγϣϯΛߦ͏߹ɺೖྗʹଘࡏ͢Δશͯͷ ϛεΛฦ͢ํ͕Ϣʔβʹ༏͍͠ɻ ͳͷͰɺ7BMJEBUFEΛ͏ɻ
None
None
/PO&NQUZ-JTUͱͷซ༻ ઌड़ͷྫͩͱ4USJOHΛͬͯΤϥʔΛੵ͕ͨ͠ɺ จࣈྻΛͪ͝Όͪ͝Όͱଓͯ͠͠·͏ͷ͋·Γ ៉ྷͳΓํͱݴ͑ͳ͍ɻ ͳͷͰɺ/PO&NQUZ-JTUΛͬͯੵͯ͠ΈΔɻ
Ͳ͏ͯ͠/PO&NQUZ-JTUͳͷ͔ʁ ผʹ௨ৗͷ-JTUͰྑ͍ͷ͕ͩɺ7BMJEBUFEͷ߹ɺ *OWBMJEʹͳΔ࣌ԿΒ͔ͷ͕ೖ͍ͬͯΔͣͳͷ Ͱɺ*OWBMJE͔ͭத͕ۭͱ͍͏ࣄ͋Γ͑ͳ͍ɻ ͳͷͰɺ/PO&NQUZ-JTUͷํ͕૬Ԡ͍͠ɻ
None
7BMJEBUFE /PO&NQUZ-JTUͷΈ߹Θͤඇৗʹ Α͘͏ͷͰɺDBUTʹ*OWBMJEΛ/PO&NQUZ-JTU ͱఆͨ͠7BMJEBUFE/FMͱ͍͏ܕ͕༧Ί༻ҙ͞Ε ͍ͯΔɻ ˣఆٛ
None
ه ʮਖ਼͍͠Λฦͭͭ͠ɺ ్தܦաͷԿ͔ੵ ͍ͨ͠ʯͱ͍͏߹ Iorͱ͍͏σʔλܕ͕ ͑Δɻ
List, Either
҉ͷมΛར༻ͯ͠ɺDBUTطଘͷΫϥεʹ৭ʑ ͳϝιουΛੜͯ͘͠ΕΔɻ ಛʹɺ-JTU&JUIFSͷ֦ு͕ศརɻ 5SBWFSTF'PMEBCMFͲ͜·Ͱศརɻ YҎલͳΒ&JUIFSʹNBQqBU.BQΛੜͯ͠ ͘ΕΔͷศརɻ
None
None
None
None
None
None
6OBQQMZʹ͍ͭͯ ্Ͱ&JUIFS7BMJEBUFEͷ-JTUʹTFRVFODF USBWFSTFΛద༻͍ͯ͠ΔͷΛݟͯɺٙʹײͨ͡ํ ଟ͍ͩΖ͏ɻ ͱ͍͏ͷɺ෦ద༻͞ΕͨܕҾΛਪͰ͖ͳ͍ ͱ͍͏ʢ4*ʣ༗໊ͰɺͦΕʹରԠ͢Δ ͨΊʹDBUT6OBQQMZΛ͍͔ͬͯͨΒͩɻ
None
͔͜͠͠ͷఔલʹղܾ͞Ε͓ͯΓɺ 4DBMB͔Βܕਪ͕վળ͞Ε͍ͯΔɻ ·ͨچόʔδϣϯͷ4DBMBͰɺTCUͷϓϥάΠϯΛ ͏ࣄͰಉͷػೳΛར༻Ͱ͖Δɻ ͜ΕΛड͚ͯDBUTͰɺٞͷɺ6OBQQMZͷར ༻Λίʔυ͔Βഉআ͢Δࣄʹͨ͠Β͍͠ɻ
ऴΘΓʹ
DBUTTDBMB[ʹ༻ҙ͞ΕͨศརͳؔΛ͏ͱɺ ͍͜͠ॲཧΛεοΩϦͱॻ͘ࣄ͕Ͱ͖Δɻ ಛʹUSBWFSTFTFRVFODFͳͲɺ࠶ؼؔ GPME-FGUΛۦͯ͠ॻ͜͏ͱ͢ΔͱͲ͏ͯ͠ෳࡶ ʹͳͬͯ͠·͏ɻ
ͨͩ͠ɺແҋʹ͍͍͑ͱ͍͏Θ͚Ͱͳ͍ͷͰ ҙɻ ݟ׳Εͳ͍ϝιουΛ͏ΑΓɺ࠶ؼؔͱ GPME-FGUͰॻ͍ͨํ͕ʢिؒޙͷࣗΛؚΊͨʣ ଞਓʹͱͬͯಡΈ͍͢ࣄ͋Δɻ ͦͷ͋ͨΓνʔϜͷͳͲݟͭͭௐ͍͖ͯ͠ ·͠ΐ͏ɻ
ࢀߟࢿྉ w UZQFMFWFMDBUT IUUQTHJUIVCDPNUZQFMFWFMDBUT w ೣ൪ IUUQFFETJODPNIFSEJOHDBUT