[英]What is the type of this function definition "twice f x = f (f x)"
这是我现在正在阅读的一本书中的一个练习题,那么这个定义的类型是什么:
twice f x = f (f x)
我了解该函数应该如何工作,但我无法弄清楚它的正确语法,
它需要两个参数,第一个是函数,第二个是我认为的基本类型,并应用该函数两次,一个用于 x,一个用于 (fx) 的返回,这就是我们正在尝试做的,但显然它是一个错误的语法
twice :: (f -> a) -> a
你能帮我找到类型吗?
您应该从它的参数开始扣除twice
类型。
从x
开始,它有类型x :: _
,但我们不知道它是什么,让我们称之为类型a
: x :: a
。
然后我们有f
,它是一个函数,从fx
我们可以告诉它接受一个类型为a
参数: f :: a -> _
,让我们调用新的未知类型b
: f :: a -> b
。
所以fx
应该是类型b
: (fx) :: b
对吗?
但是从f (fx)
我们可以看出(fx)
应该是a
,所以我们可以猜测a
和b
实际上是相同的类型,所以我们可以去掉b
并告诉f :: a -> a
。
现在我们可以知道twice
是什么类型:它是一个函数,它接受a -> a
函数和类型a
值,并返回第一个参数函数的结果(又是a
)。
所以我们有twice :: (a -> a) -> a -> a
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.