ArrowApply型クラス
関数f :: a->bと値x :: aがあるとき、f xとするとb型になる
fとxという、2つの引数から、f xを得る、とみなせる
イメージ的には、(f,x) -> f x
ちゃんと型で書くと(a->b, a) -> b
ただの関数適用を、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下
定義
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
ユースケース
どういうふうに使っているのか見たいmrsekut.icon
参考
めちゃくちゃわかりやすいmrsekut.icon*2