aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/abstract/order.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/lux/abstract/order.lux')
-rw-r--r--stdlib/source/lux/abstract/order.lux93
1 files changed, 43 insertions, 50 deletions
diff --git a/stdlib/source/lux/abstract/order.lux b/stdlib/source/lux/abstract/order.lux
index 32df7d1af..6f992695a 100644
--- a/stdlib/source/lux/abstract/order.lux
+++ b/stdlib/source/lux/abstract/order.lux
@@ -6,55 +6,48 @@
[functor (#+ Contravariant)]
["." equivalence (#+ Equivalence)]])
-(`` (signature: #export (Order a)
- {#.doc "A signature for types that possess some sense of ordering among their elements."}
-
- (: (Equivalence a)
- &equivalence)
-
- (~~ (template [<name>]
- [(: (-> a a Bit) <name>)]
-
- [<] [<=] [>] [>=]
- ))
- ))
-
-(def: #export (order equivalence <)
- (All [a]
- (-> (Equivalence a) (-> a a Bit) (Order a)))
- (let [> (function.flip <)]
- (structure (def: &equivalence equivalence)
-
- (def: < <)
-
- (def: (<= test subject)
- (or (< test subject)
- (:: equivalence = test subject)))
-
- (def: > >)
-
- (def: (>= test subject)
- (or (> test subject)
- (:: equivalence = test subject))))))
-
-(template [<name> <op>]
- [(def: #export (<name> order x y)
- (All [a]
- (-> (Order a) a a a))
- (if (:: order <op> y x) x y))]
-
- [min <]
- [max >]
+(signature: #export (Order a)
+ {#.doc "A signature for types that possess some sense of ordering among their elements."}
+
+ (: (Equivalence a)
+ &equivalence)
+
+ (: (-> a a Bit)
+ <)
)
-(`` (structure: #export contravariant (Contravariant Order)
- (def: (map-1 f order)
- (structure
- (def: &equivalence (:: equivalence.contravariant map-1 f (:: order &equivalence)))
-
- (~~ (template [<name>]
- [(def: (<name> reference sample)
- (:: order <name> (f reference) (f sample)))]
-
- [<] [<=] [>] [>=]
- ))))))
+(type: (Comparison a)
+ (-> (Order a) a a Bit))
+
+(def: #export (<= order parameter subject)
+ Comparison
+ (or (:: order < parameter subject)
+ (:: order = parameter subject)))
+
+(def: #export (> order parameter subject)
+ Comparison
+ (:: order < subject parameter))
+
+(def: #export (>= order parameter subject)
+ Comparison
+ (or (:: order < subject parameter)
+ (:: order = subject parameter)))
+
+(type: (Choice a)
+ (-> (Order a) a a a))
+
+(def: #export (min order x y)
+ Choice
+ (if (:: order < y x) x y))
+
+(def: #export (max order x y)
+ Choice
+ (if (:: order < y x) y x))
+
+(structure: #export contravariant (Contravariant Order)
+ (def: (map-1 f order)
+ (structure
+ (def: &equivalence (:: equivalence.contravariant map-1 f (:: order &equivalence)))
+
+ (def: (< reference sample)
+ (:: order < (f reference) (f sample))))))