ArrowApply型クラス
Arrow型クラスを継承する
関数f :: a->bと値x :: aがあるとき、f xとするとb型になる
fとxという、2つの引数から、f xを得る、とみなせる
イメージ的には、(f,x) -> f x
ちゃんと型で書くと(a->b, a) -> b
これをcomputationとみなす
ただの関数適用を、computationとみなしている
(a->b, a) -> bを一般化して、->をhとすると、
h (h a b, a) bと書き換えられる
これがArrowApply
でっていうmrsekut.icon
何が嬉しいの?
#??
本などでは、カリー化関数crruyAの逆関数がappと説明されているが、
appって関数じゃないじゃんmrsekut.icon
これは逆関数なの?
アンカリー化とは違うの?
ArrowApplyはなんで逆関数の方のみを定義にしたの?
「Monadクラスの利便性が低い版」とは
ref 『関数プログラミングの楽しみ』.icon p.223下
http://ziphil.com/diary/application/18.html
定義
code:hs
class Arrow h => ArrowApply h where
-- 計算と値から結果を得るという計算
app :: h (h a b, a) b
インスタンスの例
普通の関数->
code:hs
instance ArrowApply (->) where
app ~(f,c) = f c
Kleisli m
http://ziphil.com/diary/application/18.html
http://ziphil.com/file/mathematics/14.pdf
ユースケース
どういうふうに使っているのか見たいmrsekut.icon
参考
『関数プログラミングの楽しみ』 10章
Monad と ArrowApply の同値性 — Avendia
めちゃくちゃわかりやすいmrsekut.icon*2
https://qiita.com/Lugendre/items/6b4a8c8a9c85fcdcb292#モナドarrowapply
https://en.wikibooks.org/wiki/Haskell/Understanding_arrows#An_ArrowApply_is_just_boring
https://qiita.com/kanatatsu64/items/55f142d0c1644bc186f4