summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbringert <bringert@cs.chalmers.se>2005-12-06 12:39:11 +0000
committerbringert <bringert@cs.chalmers.se>2005-12-06 12:39:11 +0000
commit54b8d70443f2b41691339376677f50c7e5f62fca (patch)
tree5fa55ac6a98b89c7a391c7e70cf6b467346dbd91
parenta6dc94435648dfeeb10a691a1fd6d3ad2f6dd154 (diff)
Transfer: moved pair stuff to prelude. Added partition function.
-rw-r--r--transfer/lib/pair.tr21
-rw-r--r--transfer/lib/prelude.tr30
2 files changed, 30 insertions, 21 deletions
diff --git a/transfer/lib/pair.tr b/transfer/lib/pair.tr
deleted file mode 100644
index a4956abdd..000000000
--- a/transfer/lib/pair.tr
+++ /dev/null
@@ -1,21 +0,0 @@
-Pair : Type -> Type -> Type
-Pair A B = sig { p1 : A; p2 : B }
-
-pair : (A:Type) -> (B:Type) -> A -> B -> Pair A B
-pair _ _ x y = rec { p1 = x; p2 = y }
-
-fst : (A:Type) -> (B:Type) -> Pair A B -> A
-fst _ _ p = case p of Pair _ _ x _ -> x
-
-snd : (A:Type) -> (B:Type) -> Pair A B -> B
-snd _ _ p = case p of Pair _ _ x _ -> x
-
-{-
-
- syntax:
-
- (x1,...,xn) => { p1 = e1; ... ; pn = en }
-
- where n >= 2 and x1,...,xn are expressions or patterns
-
--} \ No newline at end of file
diff --git a/transfer/lib/prelude.tr b/transfer/lib/prelude.tr
index 3ec830d13..4c54fa249 100644
--- a/transfer/lib/prelude.tr
+++ b/transfer/lib/prelude.tr
@@ -116,6 +116,31 @@ mul_Bool = rec one = True
times = \x -> \y -> x && y
+--
+-- Tuples
+--
+
+Pair : Type -> Type -> Type
+Pair A B = sig { p1 : A; p2 : B }
+
+pair : (A:Type) -> (B:Type) -> A -> B -> Pair A B
+pair _ _ x y = rec { p1 = x; p2 = y }
+
+fst : (A:Type) -> (B:Type) -> Pair A B -> A
+fst _ _ p = case p of Pair _ _ x _ -> x
+
+snd : (A:Type) -> (B:Type) -> Pair A B -> B
+snd _ _ p = case p of Pair _ _ x _ -> x
+
+{-
+
+ syntax:
+
+ (x1,...,xn) => { p1 = e1; ... ; pn = en }
+
+ where n >= 2 and x1,...,xn are expressions or patterns
+
+-}
--
@@ -148,6 +173,11 @@ append A xs ys = foldr A (List A) (Cons A) ys xs
concat : (A : Type) -> List (List A) -> List A
concat A = foldr (List A) (List A) (append A) (Nil A)
+partition : (A : Type) -> (A -> Bool) -> List A -> Pair (List A) (List A)
+partition _ _ [] = ([],[])
+partition A p (x::xs) =
+ let r = partition A p xs
+ in if p x then (x :: fst r, snd r) else (fst r, x :: snd r)
-- Instances: