所以我有这个功能:
fn (f,g,x) => g(f(x));
这个函数的类型是:
('a -> 'b) * ('b -> 'c) * 'a -> 'c
函数是否表示f表示'a,g表示'b,x表示'c?在那种情况下,怎么会('a -> 'b)
出现?因为这不代表f - > g?
如果这是一个模糊而写得不好的问题,请道歉.
有人可以向我解释如何计算该函数的类型吗?
谢谢.
这是一个可能有用的图表:
('a -> b') * ('b -> 'c) * 'a -> 'c ^^^^^^^^ ^^^^^^^^ ^ ^^^^^^^ fn ( f , g , x) => g(f(x));
对于任何你想要的类型'a
,'b
和'c
,
f
拿一个'a
并返回一个'b
g
拿a 'b
并返回a'c
x
是一个'a
.
而'c
在最后说,鉴于这些东西,我们的函数返回'c
.
那你怎么得到一个'c
?好吧,既然x
是'a
,你可以f
用来获得'b
:
x : 'a f(x) : 'b
现在我们有一个'b
,如果你给g
一个'b
它会给你回'c
:
g(f(x)) : 'c
这就是我们如何到达功能的主体.