Syntax 带(x/=y)的成对(x,y)的类型

Syntax 带(x/=y)的成对(x,y)的类型,syntax,dependent-type,idris,Syntax,Dependent Type,Idris,我想用x/=y为pairs(x,y)设置一个类型 我的想法是定义NEqPa:Type->Type,这样NEqPa a应该包含所有元素((x,y),p),其中x:a,y:a和p:(x=y)->Void。我尝试了以下两种版本: NEqPa a = ((x, y) : (a, a) ** (x = y) -> Void) NEqPa a = ((x : a, y : a) ** (x = y) -> Void) 两者似乎在语法上都不正确,但我不知道如何修复它们 [编辑]我找到了一个解决

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

我的想法是定义
NEqPa:Type->Type
,这样
NEqPa a
应该包含所有元素
((x,y),p)
,其中
x:a
y: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)

这种方法合理吗?

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

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

谢谢如果我想详细了解Idris的语法,您有什么可以推荐的来源吗?还没有语言报告,是吗?