在SML中派生表达式类型

时间:2014-04-03 21:05:31

标签: types sml smlnj ml

我是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.    

我不确定也不清楚这一点。

提前感谢您的帮助。

1 个答案:

答案 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 = T6T6 = T4