Haskell中以下函数的最通用类型

das*_*gom 3 haskell

g = (. not)

函数最一般的类型g

g :: (Bool -> a) -> Bool -> a
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何考虑构图(.)功能。

为什么不 h :: (a -> Bool) -> a -> Bool呢?

chi*_*chi 8

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

  • 可能相关:我们看不到“没有”。在普通代码中,f比我们看到的更常见。not`,这可能会在尝试快速派生`(.not)`的类型时使期望产生偏差。乍一看我肯定是错的。 (3认同)