通过组合和部分应用添加一个值 haskell

adding a value with composition and partial application haskell

我正在尝试使用 Haskell 编写此应用组合和部分应用的函数:

function m n = (m^2) + n

我尝试过:

function m = (m^2).(+)

该方法的问题在于 (+) 是一个二元运算符。因为你把它放在点 . 的右边,所以它不会应用于左边的操作数。所以你写了:

function :: Num a => a -> a -> a
function m = (.) (m^2) (+)  -- wrong

这是以下简称:

function m = \n -> ((m^2) ((+) n))

所以这意味着 (+) n 将产生一个函数 (n+),我们将该函数应用于 (m^2) 的结果,这没有多大意义。

但是您可以简单地使用:

function :: Num a => a -> a -> a
function m = (+) (m^2)

或:

function :: Num a => a -> a -> a
function m = ((m^2) +)

给定 function m = (+) (m^2),如果我们在该函数上应用 n,我们将获得:

((+) (m^2)) n
-> (+) (m^2) n
-> (m^2) + n

您可以进一步修改 function 并删除 m 参数,其中:

function :: Num a => a -> a -> a
function = (+) . (^ 2)

语法糖用于:

function :: Num a => a -> a -> a
function = (.) (+) (^2)

如果我们现在在函数上应用 m,它将计算为:

((.) (+) (^2)) m
-> (\x -> (+) ((^2) x)) m
-> (+) ((^2) m)
-> (+) (m^2)

所以我们像前面的命令一样获取状态。