Idris,类型加法(增量)
Idris, typed addition (incrementation)
我怎样才能写出这样的函数
data Wrap : Nat -> Type where
Wrp : n -> Wrap n
addOne : (n : Nat) -> Wrap (S n)
addOne {n} = Wrp (S n)
像这样的形式
addOne : (n : Nat) -> S n
addOne {n} = S n
或类似的东西?
谢谢
addOne : (n : Nat) -> S n
无效,因为 return 类型不是类型,而是值。最接近您可能想要的是
addOne : (n : Nat) -> (k : Nat ** k = S n)
addOne n = (S n ** Refl)
其中 addOne
会 return 一些 Nat
的元组和一个证明,这个 Nat
确实是 S n
。或者事后证明 属性:
addOne : (n : Nat) -> Nat
addOne n = S n
addOneIsSucc : (n : Nat) -> addOne n = S n
addOneIsSucc n = Refl
我怎样才能写出这样的函数
data Wrap : Nat -> Type where
Wrp : n -> Wrap n
addOne : (n : Nat) -> Wrap (S n)
addOne {n} = Wrp (S n)
像这样的形式
addOne : (n : Nat) -> S n
addOne {n} = S n
或类似的东西?
谢谢
addOne : (n : Nat) -> S n
无效,因为 return 类型不是类型,而是值。最接近您可能想要的是
addOne : (n : Nat) -> (k : Nat ** k = S n)
addOne n = (S n ** Refl)
其中 addOne
会 return 一些 Nat
的元组和一个证明,这个 Nat
确实是 S n
。或者事后证明 属性:
addOne : (n : Nat) -> Nat
addOne n = S n
addOneIsSucc : (n : Nat) -> addOne n = S n
addOneIsSucc n = Refl