Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
ファンクタからモナド / Functor to Monad
Search
kii310
August 29, 2026
Programming
41
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ファンクタからモナド / Functor to Monad
kii310
August 29, 2026
More Decks by kii310
See All by kii310
カリー化と部分適用(更新) / currying_and_partial_application_in_TypeScript
kii310
0
130
ディスパッチについて
kii310
1
57
再帰関数は無名関数にできるか?
kii310
2
180
未来は現在からの継続
kii310
3
570
アーキテクチャの一番最初の話
kii310
1
74
カリー化と部分適用
kii310
3
130
抽象に依存する
kii310
1
140
抽象に依存する 〜概論編〜
kii310
2
130
純粋関数からDI
kii310
2
230
Other Decks in Programming
See All in Programming
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
360
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
420
App Storeの外へ──日本のiOSサイドローディング入門 for iOSDC Japan 2026
yuukiw00w
0
220
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
180
WebAssembly in Android Apps 〜 WASMはJNIの夢を見るか
keiji
1
110
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1k
Building an Out-of-Order CPU
latte72
1
780
モジュールの視点からSwiftを読み解く #iosdc
s_shimotori
0
180
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
270
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
3k
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
130
How I Stole PSI from Android Studio - DroidKaigi2026
worker8
0
130
Featured
See All Featured
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
500
Test your architecture with Archunit
thirion
2
2.4k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
510
The Curse of the Amulet
leimatthew05
3
15k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
エンジニアに許された特別な時間の終わり
watany
109
250k
GitHub's CSS Performance
jonrohan
1033
470k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
4 Signs Your Business is Dying
shpigford
187
23k
Bash Introduction
62gerente
615
220k
Transcript
ファンクタからモナドへ kii
ファンクタとかモナドって 聞いたことありますか?
正直分からん、、、
雰囲気掴んだので共有します
雰囲気掴んだので共有します 間違ってたらごめんなさい
がっつり関数型プログラミングの話 ですが、 私が Haskell などを知らないので TypeScript で解説します
結論
ファンクタとは 文脈に包まれた値に対して 関数が文脈を気にせず 適用できるようにした 設計(デザインパターン)
モナドとは 文脈を発生させる関数を 文脈の中でも扱えるようにした 設計(デザインパターン)
動機
そもそもファンクタやらモナドは 概念として何故あるのか
文脈に包まれた値でも 普通の値と同じように 文脈を気にせず関数を扱いたいため
普通の値 1, “one”, true
文脈に包まれた値 配列、オブジェクト、関数など
普通の値であれば
では、文脈に包まれた値 例えばオブジェクトでは?
文脈(オブジェクト)から値を 取り出して、関数適用してまた文脈に
関数を実行した後も 文脈に包んで返したい
関数は文脈を知らない そのため文脈から値を切り出す
関数が文脈を気にせず使えるように したい これがファンクタの動機
ファンクタ
取り出し、関数適用、文脈に包む 一連の処理を担う関数を用意しよう
mapCtx に処理をまとめている 引数 f に inc や double などの 具体的な関数が入る
文脈の値を数値に限定していたので、 ジェネリクスで任意の型にする
None
普通の値との比較
Ctx という文脈は map によって 文脈を気にせずに関数を 適用することができるようになった このような関数に対する デザインパターンをファンクタと呼ぶ 厳密にはファンクタ則を満たしている必要がある
Ctx という文脈は map によって 文脈を気にせずに関数を 適用することができるようになった このような関数に対する デザインパターンをファンクタと呼ぶ
メソッド チェーン を可能にして 使いやすく した バージョン
ちなみに、 配列のmapメソッドも同じです
モナド
今までは 普通の関数を文脈内で 扱えるようにした
では、 文脈を生成するような関数に 対しても文脈内で扱えるだろうか
fl 結論から話すと、 atMap が必要となる
Maybe という失敗 するかもしれない型 今回はこれが文脈
fl map ではなく atMap を実装 map だと文脈が ネストしてしまう
map だと文脈が ネストしてしまう
None
fl Maybe は atMap により Maybe を生成する関数を 文脈の中でネストせず扱えるよう になった つまりモナドとなった
Maybe は atMap により Maybe を生成する関数を 文脈の中でネストせず扱えるよう になった つまりモナドとなった fl
fl 厳密にはモナド則を満たすには atMap と of が必要
ちなみに、 DBからの取得も Promise などの 不確定という文脈を持つ これらも モナド として扱ったり できる
結論 ファンクタ、モナドは 文脈に包まれた値を 関数が文脈を知らないまま 扱うためのデザインパターン
参考 - 『JavaScript徹底攻略 関数 付録:圏論についての補足』