【问题标题】:How do I determine type of Haskell functions? [duplicate]如何确定 Haskell 函数的类型? [复制]
【发布时间】:2019-10-08 19:33:26
【问题描述】:

我正在准备考试,但有些东西我听不懂。

功能:

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 x = f (f x)吗?甚至tw f x = f (f x)?现在tw 函数没有多大意义。
  • 对不起,我错过了。在这篇文章中编辑。

标签: haskell functional-programming


【解决方案1】:

我们来分析一下函数tw

tw f x = f (f x)

twfx 作为参数。目前我们对这些参数知之甚少,所以我们将它们作为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

我们可以通过确定f (f x)的类型进一步分析tw 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 只是变量,这并不重要。

【讨论】:

    猜你喜欢
    • 2018-01-03
    • 2012-03-18
    • 1970-01-01
    • 2017-12-25
    • 2018-02-04
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多