我是sml的新手,我正在尝试理解如何派生表达式类型 我读了Deriving type expression in ML,我试图按照他所做的来推导我的表达,但我无法理解一段话。
我试图推导出的表达是:
fn x => fn y => fn z => z(z(y x))
我正在做的事情如下:
fn x : T1 => fn y : T2 => fn z : T3 => z(z(y x)) : T4
此时它应该是
T2 = T1 -> T5 //y x
T3 = T5 -> T6 //z(y x)
T3 = T6 -> T7 //z(z(y x))
这是我认为我在做错的地方。
还应该有像
这样的约束T7 = T4 or T6 = T4.
我不确定也不清楚这一点。
提前感谢您的帮助。
答案 0 :(得分:1)
您已将T4
分配给z(z(y x))
,因此我们可以在最后一个等式中使用它。
T3 = T5 -> T6 //z(y x)
T3 = T6 -> T4 //z(z(y x))
自T5 -> T6 = T6 -> T4
以来,它遵循T5 = T6
和T6 = T4
。