在标准ML中,如何定义'a*'a - > bool类型的函数?

hak*_*ata 1 parameters types ml sml smlnj

我正在尝试在Standard ML中创建一个带有2个参数并返回bool的函数,并且2个参数可以是任何类型,在其编写的规范中,'a * 'a -> bool但每当我尝试它时,它会自动生成2个参数.如何使该函数采用'a'类型的2个参数.

以下是我一直试图实现的功能:

fun lessThan (a, b) = 
    if a < b then true
    else false;
Run Code Online (Sandbox Code Playgroud)

但在写完上述功能之后,我得到的是:

val lessThan = fn : int * int -> bool
Run Code Online (Sandbox Code Playgroud)

我想要的是这个:

val lessThan = fn : 'a * 'a -> bool
Run Code Online (Sandbox Code Playgroud)

我能做些什么才能让它发挥作用?

Nor*_*sey 6

如果希望函数终止并返回值,则标准ML只有两个类型的函数'a * 'a -> bool.他们是

fun ktrue  (_, _) = true
fun kfalse (_, _) = false
Run Code Online (Sandbox Code Playgroud)

所有其他类型的纯函数都与上面的两个函数无法区分.

而这两个功能实际上有更一般的类型'a * 'b -> bool.

这实际上是编程语言理论的一个相当深刻的结果.如果你想学习基础,你可以尝试阅读John Reynolds关于表达独立性的工作或者Phil Wadler关于"自由定理"的工作.