idris 中有取模函数吗?

Is there a modulo function in idris?

在Haskell中,有modrem函数。 Idris 中是否有类似的功能,特别是在 Nat 上定义的?

Prelude.Nat中有

modNatNZ : Nat -> (y : Nat) -> Not (y = 0) -> Nat
modNat   : Nat -> Nat -> Nat

第一个需要除数不为零的证明,而第二个是部分的(即可能在运行时崩溃)。实际上也有证明,

SIsNotZ : {x: Nat} -> Not (S x = Z)

后继者不能为零。所以你可以只使用 modNatNZ 10 3 SIsNotZ,统一系统将证明 Not (3 = 0)。您可以看到 modNatNZ 是如何工作的 here。由于 Nat 始终为正,余数函数的行为相同。

否则,通用

mod : Integral ty => ty -> ty -> ty

为所有实现 Integral 的类型定义(例如 Int)。