当我有未绑定值“a”时,如何修复我的标准 ml 代码?

问题描述 投票:0回答:1

这是一个函数,它接受一个对列表并返回对中第一个对象的列表。

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 来修复代码,但最终出现了相同的错误。

sml
1个回答
0
投票

如注释中所述,类型变量以

'
开头。

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;
© www.soinside.com 2019 - 2024. All rights reserved.