\ flatten-class must-infer\r
\ flatten-builtin-class must-infer\r
\r
-: class= ( cls1 cls2 -- ? ) [ class<= ] [ swap class<= ] 2bi and ;\r
-\r
: class-and* ( cls1 cls2 cls3 -- ? ) >r class-and r> class= ;\r
\r
: class-or* ( cls1 cls2 cls3 -- ? ) >r class-or r> class= ;\r
[ [ rank-class ] bi@ < ]\r
} cond ;\r
\r
+: class= ( first second -- ? )\r
+ [ class<= ] [ swap class<= ] 2bi and ;\r
+\r
: largest-class ( seq -- n elt )\r
dup [ [ class< ] with contains? not ] curry find-last\r
[ "Topological sort failed" throw ] unless* ;\r
[ 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 ;