Idris2-boot/tests/ttimp/dot001/Dot.yaff
Edwin Brady 6c7f13d128 Implement dot patterns
Like Idris 1, these are implicitly added on encountering a repeated name
or a non-constructor application. Unlike Idris 1 (and Blodwen) they are
checking by unification rather than matching (which means in particular
that function argument names can't be bound in dot patterns) which is
slightly less expressive, but better overall because matching is
potentially more error prone.
2019-05-25 18:39:21 +01:00

23 lines
525 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)
data Parity : Nat -> Type where
Even : (n : Nat) -> Parity (plus n n)
Odd : (n : Nat) -> Parity (S (plus n n))
half : (n : Nat) -> Parity n -> Nat
half (plus $n $n) (Even $n) = n
half (S (plus $n $n)) (Odd $n) = n
data Baz : Nat -> Type where
AddThings : (x : Nat) -> (y : Nat) -> Baz (plus x y)
addBaz : (x : Nat) -> Baz x -> Nat
addBaz (plus $x $y) (AddThings $x $y) = plus x y