这是一个函数,它接受一个对列表并返回对中第一个对象的列表。
fun seconds (pairs : (a * b) list) : b list =
let
fun first (pair : a * b) : a = fst pair
in
map first pairs
end;
val pairs = [("m", false), ("w", false), ("n", true)];
val result = seconds pairs;
错误:
Elaboration failed: Unbound type "a"
我遇到的错误是“a”是一个未绑定的值。
我尝试通过在 a 周围添加括号或删除其他部分中的 a 来修复代码,但最终出现了相同的错误。
如注释中所述,类型变量以
'
开头。
fun seconds (pairs : ('a * 'b) list) : 'b list =
let
fun first (pair : 'a * 'b) : 'a = fst pair
in
map first pairs
end;
当然,所有这种类型的注释都是不必要的。让类型推断发挥作用。
fun seconds pairs =
let
fun first pair = fst pair
in
map first pairs
end;
这实际上只是一种非常冗长的书写方式:
fun seconds pairs =
map fst pairs;