命名实现 - 为什么@ {myOrd}放在参数之前?

时间:2016-03-28 14:08:28

标签: idris

在下面的代码中,为什么@{myOrd}放在他的参数之前而不是之后?

[myOrd] Ord Nat where
  compare Z (s n) = GT
  compare (S n) Z = LT
  compare (z z = EQ
  compare (S x) (S y) = compare @{myOrd} x y

有哪些优点和缺点?

1 个答案:

答案 0 :(得分:0)

compare的类型为Ord a => a -> a -> Ordering,因此Ord a实现的选择将作为第一个参数传递。

compare x y是使用未命名的Ord Nat实现的语法,通过填写基于Ord Natx的隐式y参数类型。