制作在自身上运行其输入的函数时出现无限类型错误

A-P*_*A-P 2 haskell functional-programming typeerror

我试图找出为什么这段代码没有按预期工作。

我想创建一个函数run,它将某个函数作为输入并返回应用于自身的函数。

run::(t1->t2)->t2
run a = a a
Run Code Online (Sandbox Code Playgroud)

包含的类型应该是通用的,因为我希望它适用于任何东西,但是当我尝试并且不确定为什么时,我遇到了无限的类型错误。

Dan*_*ner 5

你说a :: t1 -> t2。这意味着它的参数应该具有类型t1。然后你将它应用到自身,a a。这意味着它的参数是a.

所以现在我们有一个等式:参数应该同时具有类型t1(因为它是 的参数a)和类型t1 -> t2(因为它是a):

t1 ~ t1 -> t2
   ~ (t1 -> t2) -> t2
   ~ ((t1 -> t2) -> t2) -> t2
   ~ (((t1 -> t2) -> t2) -> t2) -> t2
   ~ ...
Run Code Online (Sandbox Code Playgroud)

每行都接续前一行,并替换t1为它等于的内容t1 -> t2。没有有限类型满足给定的等式。