函数组合和中缀函数应用说明(PureScript)
Explanation for function composition and infix function application(PureScript)
此代码有效
findName :: String -> String -> AddressBook -> Boolean
findName fname lname = not <<< null <<< filter findN
where
findN :: Entry -> Boolean
findN entry = entry.firstName == fname && entry.lastName == lname
但这不
findName fname lname book = not <<< null <<< filter findN book
此代码再次有效
findName fname lname book= not $ null $ filter findN book
这不
findName fname lname = not null $ filter findN
总之就是因为这些不同的例子相当于括号的位置不同,所以对代码的求值也不同。
f <<< g
,其中 f
和 g
是函数,等价于 \x -> f (g x)
,而 f x $ g y
等价于 (f x) (g y)
。
每当你有一个像 <<<
这样的中缀符号并且没有其他中缀符号时,首先评估符号左侧和右侧的表达式,因此你的第一个示例被评估为
findName fname lname = ((not) <<< (null) <<< (filter findN))
,
book
参数显式为
findName fname lname book = ((not) <<< (null) <<< (filter findN)) book
,
而你的第二个例子被评估为
findName fname lname book = (not) <<< (null) <<< (filter findN book)
。
filter findN book
生成一个列表,但 <<<
需要函数参数。
对于您的第三个和第四个示例,问题是相似的:如果我在第 4 个示例中显式设置 book
参数,它将是
findName fname lname = (not $ null (filter findN)) book
,(你忘记了一个 $
)。
not $ null $ ...
要求 ...
是一个 AddressBook
,但 filter findN
是一个函数,而不是地址簿。
此代码有效
findName :: String -> String -> AddressBook -> Boolean
findName fname lname = not <<< null <<< filter findN
where
findN :: Entry -> Boolean
findN entry = entry.firstName == fname && entry.lastName == lname
但这不
findName fname lname book = not <<< null <<< filter findN book
此代码再次有效
findName fname lname book= not $ null $ filter findN book
这不
findName fname lname = not null $ filter findN
总之就是因为这些不同的例子相当于括号的位置不同,所以对代码的求值也不同。
f <<< g
,其中 f
和 g
是函数,等价于 \x -> f (g x)
,而 f x $ g y
等价于 (f x) (g y)
。
每当你有一个像 <<<
这样的中缀符号并且没有其他中缀符号时,首先评估符号左侧和右侧的表达式,因此你的第一个示例被评估为
findName fname lname = ((not) <<< (null) <<< (filter findN))
,
book
参数显式为
findName fname lname book = ((not) <<< (null) <<< (filter findN)) book
,
而你的第二个例子被评估为
findName fname lname book = (not) <<< (null) <<< (filter findN book)
。
filter findN book
生成一个列表,但 <<<
需要函数参数。
对于您的第三个和第四个示例,问题是相似的:如果我在第 4 个示例中显式设置 book
参数,它将是
findName fname lname = (not $ null (filter findN)) book
,(你忘记了一个 $
)。
not $ null $ ...
要求 ...
是一个 AddressBook
,但 filter findN
是一个函数,而不是地址簿。