図で理解するArrow
コードでの具体例、実行例も添えてあると良い
図のルール
丸が関数、四角がarrow
青が入力
緑が出力
関数の図式化
まる
https://gyazo.com/f7b2830f5b3f776119abf9d81ee7316e
arr :: (a -> b) -> h a b
code:hs
f = arr (+1)
g = arr (*2)
https://gyazo.com/5db8b79a186113b0e1963447b71397c0
>>> :: h a b -> h b c -> h a c
code:hs
(f >>> g) 5 -- >> 12
なんで一緒に紹介される?
https://gyazo.com/6ae5f2302169c8ecb381efc18148e77f
(***) :: h a b -> h c d -> h (a, c) (b, d)
code:hs
(f *** g) (100,100) -- >> (101,200)
https://gyazo.com/5bf1c22b4fb38fec6f996a9798cad42f
(&&&) :: h a b -> h a b' -> h a (b,b')
入力側が同じものを合成する
なので全体として入力が一つのarrowになる
code:hs
(f &&& g) 100 -- >> (101,200)
https://gyazo.com/1c93ad352fcf2bbdd6db305e4f80b328
first :: h a b -> h (a,c) (b,c)とsecond :: h a b -> h (c,a) (c,b)
firstは前者のみに適用する
code:hs
first f (100,100) -- >> (101,100)
second g (100,100) -- >> (100,200)
https://gyazo.com/3c1756c6edaa159503d4f4290f52a885
サブクラス
|||
+++
leftとright
app
loop
基本的なもの
https://gyazo.com/a7dc64cf65b6f61900083ac788d0c923
サブクラス
https://gyazo.com/96589ab572848c0137d1a5cefc6f1da1
参考
良い動画mrsekut.icon