gpt4 book ai didi

haskell - 如何确定 Haskell 函数的类型?

转载 作者:行者123 更新时间:2023-12-04 14:53:39 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Type Inference in Haskell for functions

(1 个回答)


2年前关闭。




我正在准备我的考试,但有些东西我无法理解。

功能:

tw f x = f (f x)
f x y = (y, x)

我能够确定“f”的类型是
f :: t1 -> t -> (t, t1)

但无法确定“tw”的类型。

假定类型 tw:
tw :: (t -> t) -> t -> t

谢谢!

最佳答案

让我们分析一下函数tw :

tw f x = f (f x)
twf 为参数和 x .目前我们对这些参数了解不多,所以我们将它们作为类型 f :: ax :: b .

现在我们看到一个带有 f 的函数应用程序。函数和 x参数。因此,这意味着 f是一个接受 b 类型值的函数( x 的类型),并返回一些东西。因此,我们指定 f类型为 f :: b -> c , 与 c我们引入了一个新的类型变量。因此我们知道 f x :: c .

我们进一步看到,有一个功能应用程序 f :: b -> c函数和 f x :: c参数。由于 f的参数类型是 b , 和 f x类型为 c .因此我们得出结论, bc必须是同一类型。

因此,这意味着我们派生为类型:
x :: b
f :: b -> b

我们可以进一步分析 tw f x 的类型通过确定 f (f x) 的类型.由于 f x有类型 f x :: b , 和 f有类型 f :: b -> b , 我们知道 f (f x)有类型 f (f x) :: b .这意味着 tw 的类型是:
tw :: (b -> b) -> b -> b

如果我们替换 b对于 t ,然后我们获得预期的类型签名。但是自从 bt只是变量,没关系。

关于haskell - 如何确定 Haskell 函数的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58285479/

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