猜测定点组合的类型

god*_*dot 1 haskell functional-programming fixpoint-combinators

很抱歉这个问题,但我刚开始研究Haskell ...我的问题与"定点组合"有关...

根据此维基百科页面部分功能fix,使得

fix f = f (fix f)
Run Code Online (Sandbox Code Playgroud)

是类型(或至少可以是类型)

(a -> a) -> a
Run Code Online (Sandbox Code Playgroud)

有人能解释一下为什么吗?

谢谢 !

您是否还有任何指针(网页,书籍......)解释如何根据其定义猜测函数的类型?

dfe*_*uer 6

从定义开始

fix f = f (fix f)
Run Code Online (Sandbox Code Playgroud)

因为它需要一个参数,所以fix必须有一个看起来像的类型

fix :: x -> y
Run Code Online (Sandbox Code Playgroud)

事实上,它将其论证应用于某些事物

fix :: (p -> q) -> r
Run Code Online (Sandbox Code Playgroud)

它实际上将其参数应用于fix f,所以

fix :: (r -> q) -> r
Run Code Online (Sandbox Code Playgroud)

最终的结果实际上是这个应用程序的结果,所以

fix :: (r -> r) -> r
Run Code Online (Sandbox Code Playgroud)