关于F#类型统一(Unification of types)练习题的求解疑问
F#类型统一练习题解答验证
题目(a):int -> (('a -> 'b) option) 与 int -> 'c -> ('d option) 是否可统一
你的结论有误,这两个类型无法统一。原因如下:
- 函数类型在F#中是右结合的,因此右边的类型
int -> 'c -> ('d option)等价于int -> ('c -> ('d option)) - 左边类型的返回值是
('a -> 'b) option(一个包裹函数类型的option),右边类型的返回值是'c -> ('d option)(一个接受'c返回'd option的函数) option类型构造器和函数类型构造器是完全不同的类型构造器,无法通过替换类型变量让两者一致,因此这两个类型不能统一。
题目(b):int -> int option 与 'a -> 'b 是否可统一
你的结论完全正确,这两个类型可以统一,替换规则为:
'a替换为int'b替换为int option
类型变量'a和'b可以绑定到任意合法类型,包括函数类型、option组合类型等,替换后两个类型完全一致。
内容的提问来源于stack exchange,提问作者Andri
相关产品推荐
相关产品推荐

