SML 仿函数可以采用非结构参数(Ullman 8.3.4)吗?

Can SML functors take non-structure arguments (Ullman 8.3.4)?

我只是想在这里检查一下我的理解,我正在学习 ML 编程基础 的仿函数章节作为刷新,其中一个问题需要编写一个仿函数"takes only an integer b as input." 我可以编写一个仿函数,其应用如下:

structure HashFn100 = MakeHashFn(struct val i = 100 end);

但不是

structure HashFn100 = MakeHashFn(100);

正如问题陈述所暗示的那样。措辞是否让我感到困惑,我当前的仿函数是否正确,或者有没有办法将仿函数应用于我丢失的非结构?不幸的是,这个练习在解决方案手册中没有答案。

你可以写

structure HashFn100 = MakeHashFn(val i = 100)

这是您展示的第一种形式的语法糖。第二个是不合法的——从语法上讲,仿函数参数必须是模块(结构或标识符)或声明序列(作为结构的 shorthand)。