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

标签 haskell functional-programming typeerror

我想弄清楚为什么这段代码没有按预期工作。

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

run::(t1->t2)->t2
run a = a a

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

最佳答案

你说 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
   ~ ...

每一行都是通过将 t1 替换为它等于 t1 -> t2 的内容来继承上一行。没有有限类型满足给定的等式。

关于haskell - 制作在自身上运行其输入的函数时出现无限类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69968547/

相关文章:

Node.js 和复杂的业务逻辑

scala - scala 中的函数式编程 - 无限流

python - 在电报机器人中使用 bot.register_next_step_handler 我得到 TypeError : 'NoneType' object is not callable

haskell - 如何在 Haskell 中使用 random-fu 和与平台无关的代码生成随机数?

haskell - 使用 isPrefixOf 过滤元组列表

haskell - 以下某些树数据类型在计算机科学中使用的名称是什么?

java - Java 8 流上的缓冲区运算符

Javascript:类型错误混淆

jquery - 使用 PrimeFaces 手动添加/加载 jQuery 会导致未捕获的类型错误

haskell - 从外部网络采样行为