gpt4 book ai didi

haskell - 为什么 `f x = x x` 和 `g x = x x x x x` 有相同的类型

转载 作者:行者123 更新时间:2023-12-04 18:11:02 31 4
gpt4 key购买 nike

我正在玩 Rank-N-type 并尝试输入 x x .但我发现这两个函数可以以相同的方式输入,这很不直观。

f :: (forall a b. a -> b) -> c
f x = x x

g :: (forall a b. a -> b) -> c
g x = x x x x x
我还注意到像 f x = x x ... x x 这样的东西(许多 x s)仍然具有相同的类型。
谁能解释为什么会这样?

最佳答案

关键是x :: a -> b是一个可以提供任何类型值的函数,无论给出什么参数。这意味着 x可以应用于自身,结果可以应用于x再次,依此类推。
至少,这就是它对类型检查器的 promise 。类型检查器不关心是否存在任何此类值,只关心类型对齐。都不是f也不是 g实际上可以调用,因为没有 a -> b 类型的此类值存在(忽略底部和 unsafeCoerce )。

关于haskell - 为什么 `f x = x x` 和 `g x = x x x x x` 有相同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69884616/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com