SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
tuOkaerF @ aratarih

レンズ
danoM::ataD

圏論好き
モナモナ言うモナド入門

aratarih@

自己紹介
モナドの話しかしない
おじさん?
sdanom tuoba gniklat potS
sdanomoc tuoba klaT
arbeglaoc danomoc etatsoc si snel
sn e l

データ構造の一部に注目
オブジェクトのフィールドに注目
セッターとゲッターの組
ネストするデータ構造
nm =cmi.eAto(.eNm(
ae
omtgtuhr)gtae)
cmi.eAto(.eNm(hrtr"
omtgtuhr)stae"iaaa)
イミュータブルの場合
セッターは新しいインスタンスを返す。
ato
uhr
=cmi.eAto(
omtgtuhr)
nwuhr=ato.eNm(hrtr"
eAto
uhrstae"iaaa)
nwomt=cmi.eAto(eAto)
eCmi
omtstuhrnwuhr
sn e l

n m というレンズの、s t n m がセッター、g t n m が
ae
e ae
e ae
ゲッター。
nwuhr=(e nm)ato "iaaa
eAto
st ae uhr hrtr"
の合成

sn e l

合成演算を定義すれば、ネストした先のデータを簡単に更新
できる。
nwomt=(e (ae.ato) cmi "iaaa
eCmi
st nm
uhr) omt hrtr"

n m . a t o は作者の名前に注目するレンズ。通常のフ
ae
uhr
ィールドと同じように値をセットできる。
sn e l

様々な

の実装

Ln {e : s- v st: s- v- s
es gt :
> , e :
>
> }
直感的
s- (,v- s
> v
> )

arbeglaoc danomoc etatsoc

Fntrf= ( - fv - s- fs
uco
> v >
) >
>
の の実装に近い

snel lleksaH

.1
.2
.3
と

の関係

.2

.1

Ln {e : s- v st: s- v- s
es gt :
> , e :
>
> }
s- (,v- s
> v
> )
Fntrf= ( - fv - s- fs
uco
> v >
) >
>
は直積 g t s t であり、同値。
e e

>

,

<

.2

s
> tes, teg<
tes

s

v

)s

dns

v ,v (

teg
ts f

v

.3
.2
.1
.3

と

の関係

.2

Ln {e : s- v st: s- v- s
es gt :
> , e :
>
> }
s- (,v- s
> v
> )
Fntrf= ( - fv - s- fs
uco
> v >
) >
>
米田の補題を二回使うことで同値。
XF

) F ,)

, X(
)

, X(

steS
F

(

steS

.3
.2
.1
VF

V

) F ,)

, V(

× V(

steS

積と冪が随伴の関係であることから、
V

XF

V

VF

)

F

V ,)

V

, V(

X

として を用いると、
)

F

V ,)

, X(

(

(

steS

steS

について、
考えると米田の補題より、

XF

V

X

steS

: F

任意の関手

なる関手を
)S

V( × V

))S(

,)

なる関手を用いれば、
SG

GS

))S(
)S

,)
)X
,)

,)

V( × V(
V( × V
, G(

, G(

steS(
steS(

steS(

steS

s teS

X
s teS

s teS

なる関手を
と、米田の補題より、

SG = G S

steS

G

として、

steS

steS

steS :

S

一方、

と定義する
)S

つまり、F n t r f = ( - f v - f s
uco
> v >
) >
と( , v > )
v - s は同値。
))S(

V( × V

V( × V

)S

))S(

,) V(

V(

ste S

s teS

steS

先に示しておいた関係により、
,)

,)

, V(steS × V(
steS

s teS

steS(
ste S

s teS

steS

 を

とすれば、
trapretnuoc eht fo ,etisoppo eht fo )scitamehtam(

laud

-o c

「反対」という意味。ほとんどの場合は

な概念。

とは
M

MM

M

M

MM

MMM
M

M

danom

MM
M

M
M
W

WW

W

W

WW

W

WWW

W

danomo c

W

WW

W

W
X
h

XM

X

X

X

h

h

XM

X

1

ar b eg l a

XM : h

XM
X

XMM

hM

と

の組。

0

X
X
h

XW
1

X

X

X

XW

h

h

XW
X : h

XW
X

hW

ar b eg l ao c

XWW

と

の組。

0

X
S)) V ×

(

)
V × S

V(( =
V = S VM

danom e ta t s
積と冪の合成。
X))

V(

)V ×

V × )S

(( =
V( = S V W

danomo c e ta t so c
冪と積の合成。
ar b eg l ao c d a nomo c e t a t so c
) V × )S

V((

S = S VW

S

dt CSaevs=CSae( - s v
aa ott
ott v > )
casCmndwwee
ls ooa
hr
etat: ws- s
xrc :
>
dpiae: ws- w( s
ulct :
>
w )
isac Cmnd(ott s wee
ntne ooa CSae ) hr
-etat: ( - s v - s
-xrc : v > , ) >
etat(ott fv =fv
xrc CSae
)
-dpiae: ( - s v - ( - ( - s v,v
-ulct : v > , ) > v > v > , ) )
dpiae(ott fv =CSae(u- CSaefu v
ulct CSae
)
ott  > ott
)
s- ( - s v
> v > , )
tp Ln sv=s- CSaevs
ye es
> ott
u s l tes = u )v s l tes( l tes
v = )v s l tes( l teg
s = )s l teg( s l tes

arbeglaoc danomoc

sn eL
、

の定義から、以下が成り立つ。

が満たす性質
adenoY dna ,serotS ,sesneL

nevohraaL nav nawT

表現は米田の補題から導ける

danomoc etatsoc eht rof sarbeglaoc eht era sesneL

arbeglaoc danomoc

sneL

の満たすべき性質は

の性質である

まとめ

Contenu connexe

En vedette

Stateモナドの解説 中編
Stateモナドの解説 中編Stateモナドの解説 中編
Stateモナドの解説 中編
Masahiro Honma
 
Stateモナドの解説 後編
Stateモナドの解説 後編Stateモナドの解説 後編
Stateモナドの解説 後編
Masahiro Honma
 
Stateモナドの解説 前編
Stateモナドの解説 前編Stateモナドの解説 前編
Stateモナドの解説 前編
Masahiro Honma
 

En vedette (20)

すべてが@__kanになる
すべてが@__kanになるすべてが@__kanになる
すべてが@__kanになる
 
モナモナ言うモナド入門.tar.gz
モナモナ言うモナド入門.tar.gzモナモナ言うモナド入門.tar.gz
モナモナ言うモナド入門.tar.gz
 
20120526 hachioji.pm
20120526 hachioji.pm20120526 hachioji.pm
20120526 hachioji.pm
 
Stateモナドの解説 中編
Stateモナドの解説 中編Stateモナドの解説 中編
Stateモナドの解説 中編
 
Perl saved a lady.
Perl saved a lady.Perl saved a lady.
Perl saved a lady.
 
Stateモナドの解説 後編
Stateモナドの解説 後編Stateモナドの解説 後編
Stateモナドの解説 後編
 
TraitとMoose::Role
TraitとMoose::RoleTraitとMoose::Role
TraitとMoose::Role
 
Hachioji.pm in Machida の LT
Hachioji.pm in Machida の LTHachioji.pm in Machida の LT
Hachioji.pm in Machida の LT
 
Math::Category
Math::CategoryMath::Category
Math::Category
 
Types and perl language
Types and perl languageTypes and perl language
Types and perl language
 
定理3
定理3定理3
定理3
 
Monads in perl
Monads in perlMonads in perl
Monads in perl
 
Stateモナドの解説 前編
Stateモナドの解説 前編Stateモナドの解説 前編
Stateモナドの解説 前編
 
Git入門
Git入門Git入門
Git入門
 
ウヰスキーとPSGI
ウヰスキーとPSGIウヰスキーとPSGI
ウヰスキーとPSGI
 
カレーとHokkaidopm
カレーとHokkaidopmカレーとHokkaidopm
カレーとHokkaidopm
 
モデルから知るGit
モデルから知るGitモデルから知るGit
モデルから知るGit
 
Arrows in perl
Arrows in perlArrows in perl
Arrows in perl
 
AnyEvent and Plack
AnyEvent and PlackAnyEvent and Plack
AnyEvent and Plack
 
循環参照のはなし
循環参照のはなし循環参照のはなし
循環参照のはなし
 

Dernier

Dernier (7)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

レンズ (ぶつかり稽古の没プレゼン)