对(x,y)的类型为(x / = y)

时间:2017-04-18 22:12:23

标签: syntax dependent-type idris

我想为(x, y)x /= y设置一个类型。

我的想法是定义NEqPa : Type -> TypeNEqPa a应包含((x,y), p)x : ay : a的所有元素p : (x = y) -> Void。我尝试了以下两个版本:

NEqPa a = ((x, y) : (a, a) ** (x = y) -> Void)

NEqPa a = ((x : a, y : a) ** (x = y) -> Void)

两者似乎都在语法上不正确,但我不知道如何修复它们。

[编辑]我找到了解决方案:

NEqPa a = (p : (a, a) ** (fst p = snd p) -> Void)

这种方法合理吗?

1 个答案:

答案 0 :(得分:2)

当你想在第一个坐标上添加显式类型注释时,**的语法糖有点难以使用。我只是直接使用DPair

NEqPa : Type -> Type
NEqPa a = DPair (a, a) $ \(x, y) => Not (x = y)