use*_*355 2 haskell composition
我有三个函数xyz和一个名为functionComposer的函数.
我希望functionComposer将函数xyz作为参数,并返回一个函数,该函数使用y和z的结果作为x的参数并应用x.
在数学符号中: x(y(a),z(b))
我不是要求这个: functionComposer x y z = x.y.z
例如:
double x = x + x
summer x y = x + y
functionComposer summer double double = summer (double) (double)
Run Code Online (Sandbox Code Playgroud)
如果x = 2,结果应为8(2 + 2)+(2 + 2)
Dan*_*zer 10
你也可以(->) a像这样使用applicative实例
import Control.Applicative
funcComp summer double1 double2 = summer <$> double1 <*> double2
Run Code Online (Sandbox Code Playgroud)
或monad实例
funcComp summer double1 double2 = liftM2 summer double1 double2
Run Code Online (Sandbox Code Playgroud)
理解这一点的方法是,for (->) aapplic和monad实例都意味着对函数值进行"参数化" double1并且double2都接受.
使用你的符号:
functionComposer summer double1 double2 = \x -> summer (double1 x) (double2 x)
Run Code Online (Sandbox Code Playgroud)
所述\x -> ...表示函数映射x到....
注意我必须给double函数参数赋予不同的名称,因为通常你想要组成不同的函数.