有g = (. not)
。
函数最一般的类型g
是
g :: (Bool -> a) -> Bool -> a
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何考虑构图(.)
功能。
为什么不 h :: (a -> Bool) -> a -> Bool
呢?
g = (. not)
Run Code Online (Sandbox Code Playgroud)
根据本节的定义,等同于
g = \f -> f . not
Run Code Online (Sandbox Code Playgroud)
或者
g f = f . not
Run Code Online (Sandbox Code Playgroud)
由于f
将的输出not
作为输入,因此它必须接受布尔值作为输入,因此它必须具有type Bool -> something
。
由此,我认为您可以弄清楚其余的内容。
请注意,这与将段写为(或作为lambda表示为)(. not)
非常不同。我认为您的困惑源于此。(.) not
(not .)
\f -> not . f