我刚从 F* 开始,我的意思是我已经写了几行连同教程。到目前为止,这真的很有趣,我想继续学习。
我自己尝试做的第一件事是编写一个表示非空列表的类型。这是我的尝试:
type nonEmptyList 'a = l : (list 'a) { l <> [] }
但我得到了错误
无法验证隐式参数:子类型检查失败;预期类型 (a#6468:Type{(hasEq a@0)}); 得到类型类型
我知道我走在正确的轨道上,因为如果我将列表类型限制为包含字符串,这确实有效:
type nonEmptyList = l : (list string) { l <> [] }
我假设这意味着l <> []
在原始示例中无效,因为我没有指定'a
应该支持平等。问题是我一生都无法弄清楚如何做到这一点。我猜这与更高的类型hasEq
有关,但尝试诸如:
type nonEmptyList 'a = l : (list 'a) { hasEq 'a /\ l <> [] }
没有把我带到任何地方。该教程没有涵盖hasEq
,我在 GitHub 存储库中的示例中找不到任何有用的东西,所以现在我被困住了。