Idris - 派生扩展接口实例

Idris - derive extended interface instance

假设我有一个函数 f : Ord a => ... 需要 aOrd 实例。 我可以使用

访问 Ord a 实例
f : Ord a => ...
f @{ord} ...

由于 Eq a => Ord aa 也需要有一个 Eq a 实例。有没有办法直接从 Ord a 检索它,而不是像下面这样做?

f : (Eq a, Ord a) => ...
f @{eq} @{ord} ...

可以使用 %implementation,执行如下操作:

eqFromOrd : Ord a => Eq a
eqFromOrd @{ord} = %implementation

我会使用@marcosh 的解决方案,但这里有另一种解释表明我们并不严格需要 %implementation:

eqExplicit : Eq a => Eq a
eqExplicit @{eq} = eq

eqFromOrd : Ord a => Eq a
eqFromOrd = eqExplicit