假设我想f
根据其他一些预定义函数定义一个函数g
,如下所示:
f :: Int -> Int -> Int
f 2 b = g b
f _ _ = 1
也就是说,我想将投影定义为f(2,_) : Int->Int
与g(_) : Int->Int
. 令人高兴的是,Haskell 具有一流的功能,因此如下定义squarePlusOne
是有效且标准的:
plusOne :: Int -> Int
plusOne i = i+1
square :: Int -> Int
square i = i*i
squarePlusOne :: Int -> Int
squarePlusOne = plusOne . Square
使用 Haskell 的柯里化(即f
只接受一个Int
作为输入并返回一个(Int->Int)
类型化的函数),我很惊讶我不能写
f 2 = g
为什么不?还是有其他语法?