1
0
forked from GitHub/gf-core

Added some tricky transfer type checking examples.

This commit is contained in:
bringert
2006-03-20 14:04:11 +00:00
parent 14b9c4ff8c
commit 7ff1b927e8

View File

@@ -0,0 +1,31 @@
--
-- Pattern matching and inductive families.
--
data Tree : Type -> Type where
EAdd : Tree Integer -> Tree Integer -> Tree Integer
EInt : Integer -> Tree Integer
EFoo : (A:Type) -> A -> Tree A
strip : (B : Type) -> Tree B -> B
strip _ t = case t of
EAdd x y -> x+y
EInt i -> i
EFoo _ x -> x
--
-- Subtyping
--
getX : { x : Integer } -> Integer
getX r = r.x
getY : { y : Integer } -> Integer
getY r = r.y
proj2 : (A:Type) -> (B:Type) -> (C:Type) -> (A -> B) -> (A -> C) -> A -> (B,C)
proj2 _ _ _ f g x = (f x, g x)
getXY : { x : Integer, y : Integer } -> (Integer,Integer)
getXY r = proj2 ? ? ? getX getY r