From 0582f45fcb0464590ebe8621786be90f7d834927 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@slava-pestovs-macbook-pro.local>
Date: Tue, 22 Jul 2008 01:27:52 -0500
Subject: [PATCH] Add more class algebra opeations

---
 core/classes/algebra/algebra-tests.factor |  2 --
 core/classes/algebra/algebra.factor       |  3 +++
 core/generic/math/math.factor             | 10 ++++++++--
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/core/classes/algebra/algebra-tests.factor b/core/classes/algebra/algebra-tests.factor
index 665fc86ebb..350c2fd66f 100755
--- a/core/classes/algebra/algebra-tests.factor
+++ b/core/classes/algebra/algebra-tests.factor
@@ -13,8 +13,6 @@ IN: classes.algebra.tests
 \ flatten-class must-infer
 \ flatten-builtin-class must-infer
 
-: class= ( cls1 cls2 -- ? ) [ class<= ] [ swap class<= ] 2bi and ;
-
 : class-and* ( cls1 cls2 cls3 -- ? ) >r class-and r> class= ;
 
 : class-or* ( cls1 cls2 cls3 -- ? ) >r class-or r> class= ;
diff --git a/core/classes/algebra/algebra.factor b/core/classes/algebra/algebra.factor
index 00657f48c4..23695c06f8 100755
--- a/core/classes/algebra/algebra.factor
+++ b/core/classes/algebra/algebra.factor
@@ -186,6 +186,9 @@ M: anonymous-complement (classes-intersect?)
         [ [ rank-class ] bi@ < ]
     } cond ;
 
+: class= ( first second -- ? )
+    [ class<= ] [ swap class<= ] 2bi and ;
+
 : largest-class ( seq -- n elt )
     dup [ [ class< ] with contains? not ] curry find-last
     [ "Topological sort failed" throw ] unless* ;
diff --git a/core/generic/math/math.factor b/core/generic/math/math.factor
index 1c1368a6c2..834e19d9d9 100755
--- a/core/generic/math/math.factor
+++ b/core/generic/math/math.factor
@@ -22,8 +22,14 @@ PREDICATE: math-class < class
         [ drop { 100 100 } ]
     } cond ;
     
-: math-class-max ( class class -- class )
-    [ [ math-precedence ] compare +gt+ eq? ] most ;
+: math-class<=> ( class1 class2 -- class )
+    [ math-precedence ] compare +gt+ eq? ;
+
+: math-class-max ( class1 class2 -- class )
+    [ math-class<=> ] most ;
+
+: math-class-min ( class1 class2 -- class )
+    [ swap math-class<=> ] most ;
 
 : (math-upgrade) ( max class -- quot )
     dupd = [ drop [ ] ] [ "coercer" word-prop [ ] or ] if ;