【发布时间】:2019-07-12 14:53:18
【问题描述】:
我希望创建一类可以证明某个元素是正数或负数或零的类型。我已经创建了一个界面:
interface Signed t where
data Positive : t -> Type
data Negative : t -> type
data IsZero : t -> Type
现在我想为Nat 创建一个实现,但我不知道它的语法。例如,这不起作用:
Signed Nat where
data Positive : Nat -> Type where
PosNat : (n : Nat) -> Positive (S n)
data Negative : Nat -> Type where
NegNat : Void -> Negative Nat
data IsZero : Nat -> Type
ZZero : IsZero Z
我得到not end of block 错误,其中data Positive 代表实施。但是,省略 data Positive... 行也不起作用。然后伊德里斯说method Positive is undefined。那么如何在接口中实现类型呢?
以下似乎也不起作用:
data NonZero : Signed t => (a : t) -> Type where
PositiveNonZero : Signed t => Positive a -> NonZero a
NegativeNonZero : Signed t => Negative a -> NonZero a
伊德里斯说:Can't find implementation for Signed phTy。那么做这一切的正确语法是什么?也许我做错了?我知道Data.So 的存在,但是经过几次实验后,我觉得它很复杂,我更喜欢使用手动定义的证明,这要简单得多。除了Data.So 的文档本身声明它应该与原语一起使用。
【问题讨论】: