Haskell 类型不清楚

Haskell type not clear

我正在尝试的其中一个练习定义了一个函数,如下所示:

twice f x = f (f x)

当我打印两次的类型时,我看到:

Main> :t twice
twice :: (a -> a) -> a -> a

不确定我是否理解此处的输出。所以 twice 接受函数类型的输入(a -> a 类型)。这个对吗?如果是这样,那么 f 是如何评估为函数类型 (a -> a) 的?那么这里的twice的return类型是什么?

twice    f            x  =   f (f x)
twice :: (a -> a) ->  a  ->  a

是这样的

fa -> a类型,x是a类型,f (f x)a.

类型

您应该将 f 作为 a -> a 函数传递,例如 * 2

是的,没错。

f 的类型为 a -> a

需要 x 类型 a 并且应该能够再次使用他的输出,所以输出应该与输入的类型相同。

并且 twice 与来自 f 的调用具有相同的输出类型,因此 a.

这给了我们这个:

twice :: (a -> a) -> a -> a
twice     f          x =  f (f x)