Idris2/tests/ttimp/nest002/Case.yaff

40 lines
874 B
Plaintext

data Nat : Type where
Z : Nat
S : Nat -> Nat
plus : Nat -> Nat -> Nat
plus Z $y = y
plus (S $k) $y = S (plus k y)
cplus : Nat -> Nat -> Nat
cplus $x $y
= case x of
Z => y
S $k => S (cplus k y)
data Vect : Nat -> Type -> Type where
Nil : Vect Z $a
Cons : $a -> Vect $k $a -> Vect (S $k) $a
append : Vect $n $a -> Vect $m $a -> Vect (cplus $n $m) $a
append Nil $ys = ys
append (Cons $x $xs) $ys = Cons x (append xs ys)
cappend : Vect $n $a -> Vect $m $a -> Vect (cplus $n $m) $a
cappend $xs $ys
= case xs of
Nil => ys
Cons $x $zs => Cons x (cappend zs ys)
cvec : {n : _} -> Vect n $a -> Nat
cvec {n = $n} $xs
= case xs of
Nil => n
Cons $x $xs => n
cvec2 : {n : _} -> Vect n $a -> Nat
cvec2 {n = n@(_)} $xs
= case xs of
Nil => n
Cons $x $xs => n