【发布时间】:2016-03-18 17:17:00
【问题描述】:
我得到了以下代码,并被要求确定类型。
exception Break;
fn f => fn a => fn b =>
(f(raise Break)
handle Break => if (f a) then a else raise Break)
handle Break => if not(f a) then a else b;
我知道这个函数在所有情况下都接受 f、a 和 b 并输出 a,所以它必须等价于:
fn f => fn a => fn b => a
类型:
'a -> 'b -> 'c -> 'b
因为 'if( f a)' 我们可以推导出 'a 必须是一个接受类型 'b 并输出布尔值的函数,否则它将无法工作。
('b->bool) -> 'b -> 'c -> 'b
re done so 'a is the beginning:
('a->bool) -> 'a -> 'b -> 'a
是我从中得到的最终答案。但是,当我在命令提示符中输入它时,我得到以下类型:
(bool->bool) -> bool -> bool -> bool
我错过了什么? 'a 和 'b(来自我的最终类型评估)在什么时候专门用于 bool?
【问题讨论】: