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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
kii310
August 29, 2026
Programming
43
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
190
未来は現在からの継続
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 × TiDD / 2026.09.05 Redmine 大阪
tokudiro
1
180
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
450
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
150
一人だけ、Kiroが静止する日
hideg
0
130
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
130
標準パッケージに uuid が追加された 背景から見る Go らしい意思決定 / go_127_uuid_decision
convto
5
8.2k
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
910
速く作れる。その次は、速く確かめられる開発へ 〜AIネイティブ開発を支える、Shift Down〜 / Can build fast. Next, moving to development where we can verify fast.
rkaga
5
4.3k
SONY CISC-NEWS NWS-1750 + NWB-225 フレームバッファの NetBSD/news68k ドライバ実装 / OSC2026Hiroshima
tsutsui
0
140
What We Talk About When We Talk About XP
m_seki
2
680
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
4
3.5k
スマートフォンでモールス信号を送受信する 〜スマートフォンのLEDとカメラで作る光通信の設計と実装〜
atsuki_seo
0
170
Featured
See All Featured
How to build a perfect <img>
jonoalderson
1
6k
Docker and Python
trallard
47
4.2k
Skip the Path - Find Your Career Trail
mkilby
1
240
KATA
mclloyd
PRO
35
15k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.6k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Fashionably flexible responsive web design (full day workshop)
malarkey
409
67k
Paper Plane
katiecoart
PRO
4
53k
Tell your own story through comics
letsgokoyo
1
1.1k
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
580
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徹底攻略 関数 付録:圏論についての補足』