aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/data/collection/set/multi.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/library/lux/data/collection/set/multi.lux')
-rw-r--r--stdlib/source/library/lux/data/collection/set/multi.lux220
1 files changed, 110 insertions, 110 deletions
diff --git a/stdlib/source/library/lux/data/collection/set/multi.lux b/stdlib/source/library/lux/data/collection/set/multi.lux
index 89baa8935..2d4c3975b 100644
--- a/stdlib/source/library/lux/data/collection/set/multi.lux
+++ b/stdlib/source/library/lux/data/collection/set/multi.lux
@@ -21,118 +21,118 @@
(abstract: .public (Set a)
(Dictionary a Nat)
- [(def: .public empty
- (All (_ a) (-> (Hash a) (Set a)))
- (|>> dictionary.empty :abstraction))
-
- (def: .public size
- (All (_ a) (-> (Set a) Nat))
- (|>> :representation dictionary.values (list\mix n.+ 0)))
-
- (def: .public (has multiplicity elem set)
- (All (_ a) (-> Nat a (Set a) (Set a)))
- (case multiplicity
- 0 set
- _ (|> set
- :representation
- (dictionary.revised' elem 0 (n.+ multiplicity))
- :abstraction)))
-
- (def: .public (lacks multiplicity elem set)
- (All (_ a) (-> Nat a (Set a) (Set a)))
- (case multiplicity
- 0 set
- _ (case (dictionary.value elem (:representation set))
- {#.Some current}
- (:abstraction
- (if (n.> multiplicity current)
- (dictionary.revised elem (n.- multiplicity) (:representation set))
- (dictionary.lacks elem (:representation set))))
-
- #.None
- set)))
-
- (def: .public (multiplicity set elem)
- (All (_ a) (-> (Set a) a Nat))
- (|> set :representation (dictionary.value elem) (maybe.else 0)))
-
- (def: .public list
- (All (_ a) (-> (Set a) (List a)))
- (|>> :representation
- dictionary.entries
- (list\mix (function (_ [elem multiplicity] output)
- (list\composite (list.repeated multiplicity elem) output))
- #.End)))
-
- (template [<name> <composite>]
- [(def: .public (<name> parameter subject)
- (All (_ a) (-> (Set a) (Set a) (Set a)))
- (:abstraction (dictionary.merged_with <composite> (:representation parameter) (:representation subject))))]
-
- [union n.max]
- [sum n.+]
- )
-
- (def: .public (intersection parameter (^:representation subject))
- (All (_ a) (-> (Set a) (Set a) (Set a)))
- (list\mix (function (_ [elem multiplicity] output)
- (..has (n.min (..multiplicity parameter elem)
- multiplicity)
- elem
- output))
- (..empty (dictionary.key_hash subject))
- (dictionary.entries subject)))
-
- (def: .public (difference parameter subject)
- (All (_ a) (-> (Set a) (Set a) (Set a)))
- (|> parameter
- :representation
+ (def: .public empty
+ (All (_ a) (-> (Hash a) (Set a)))
+ (|>> dictionary.empty :abstraction))
+
+ (def: .public size
+ (All (_ a) (-> (Set a) Nat))
+ (|>> :representation dictionary.values (list\mix n.+ 0)))
+
+ (def: .public (has multiplicity elem set)
+ (All (_ a) (-> Nat a (Set a) (Set a)))
+ (case multiplicity
+ 0 set
+ _ (|> set
+ :representation
+ (dictionary.revised' elem 0 (n.+ multiplicity))
+ :abstraction)))
+
+ (def: .public (lacks multiplicity elem set)
+ (All (_ a) (-> Nat a (Set a) (Set a)))
+ (case multiplicity
+ 0 set
+ _ (case (dictionary.value elem (:representation set))
+ {#.Some current}
+ (:abstraction
+ (if (n.> multiplicity current)
+ (dictionary.revised elem (n.- multiplicity) (:representation set))
+ (dictionary.lacks elem (:representation set))))
+
+ #.None
+ set)))
+
+ (def: .public (multiplicity set elem)
+ (All (_ a) (-> (Set a) a Nat))
+ (|> set :representation (dictionary.value elem) (maybe.else 0)))
+
+ (def: .public list
+ (All (_ a) (-> (Set a) (List a)))
+ (|>> :representation
dictionary.entries
(list\mix (function (_ [elem multiplicity] output)
- (..lacks multiplicity elem output))
- subject)))
-
- (def: .public (sub? reference subject)
- (All (_ a) (-> (Set a) (Set a) Bit))
- (|> subject
- :representation
- dictionary.entries
- (list.every? (function (_ [elem multiplicity])
- (|> elem
- (..multiplicity reference)
- (n.>= multiplicity))))))
-
- (def: .public (support set)
- (All (_ a) (-> (Set a) (//.Set a)))
- (let [(^@ set [hash _]) (:representation set)]
- (|> set
- dictionary.keys
- (//.of_list hash))))
-
- (implementation: .public equivalence
- (All (_ a) (Equivalence (Set a)))
-
- (def: (= (^:representation reference) sample)
- (and (n.= (dictionary.size reference)
- (dictionary.size (:representation sample)))
- (|> reference
- dictionary.entries
- (list.every? (function (_ [elem multiplicity])
- (|> elem
- (..multiplicity sample)
- (n.= multiplicity))))))))
-
- (implementation: .public hash
- (All (_ a) (Hash (Set a)))
-
- (def: &equivalence ..equivalence)
-
- (def: (hash (^:representation set))
- (let [[hash _] set]
- (list\mix (function (_ [elem multiplicity] acc)
- (|> elem (\ hash hash) (n.* multiplicity) (n.+ acc)))
- 0
- (dictionary.entries set)))))]
+ (list\composite (list.repeated multiplicity elem) output))
+ #.End)))
+
+ (template [<name> <composite>]
+ [(def: .public (<name> parameter subject)
+ (All (_ a) (-> (Set a) (Set a) (Set a)))
+ (:abstraction (dictionary.merged_with <composite> (:representation parameter) (:representation subject))))]
+
+ [union n.max]
+ [sum n.+]
+ )
+
+ (def: .public (intersection parameter (^:representation subject))
+ (All (_ a) (-> (Set a) (Set a) (Set a)))
+ (list\mix (function (_ [elem multiplicity] output)
+ (..has (n.min (..multiplicity parameter elem)
+ multiplicity)
+ elem
+ output))
+ (..empty (dictionary.key_hash subject))
+ (dictionary.entries subject)))
+
+ (def: .public (difference parameter subject)
+ (All (_ a) (-> (Set a) (Set a) (Set a)))
+ (|> parameter
+ :representation
+ dictionary.entries
+ (list\mix (function (_ [elem multiplicity] output)
+ (..lacks multiplicity elem output))
+ subject)))
+
+ (def: .public (sub? reference subject)
+ (All (_ a) (-> (Set a) (Set a) Bit))
+ (|> subject
+ :representation
+ dictionary.entries
+ (list.every? (function (_ [elem multiplicity])
+ (|> elem
+ (..multiplicity reference)
+ (n.>= multiplicity))))))
+
+ (def: .public (support set)
+ (All (_ a) (-> (Set a) (//.Set a)))
+ (let [(^@ set [hash _]) (:representation set)]
+ (|> set
+ dictionary.keys
+ (//.of_list hash))))
+
+ (implementation: .public equivalence
+ (All (_ a) (Equivalence (Set a)))
+
+ (def: (= (^:representation reference) sample)
+ (and (n.= (dictionary.size reference)
+ (dictionary.size (:representation sample)))
+ (|> reference
+ dictionary.entries
+ (list.every? (function (_ [elem multiplicity])
+ (|> elem
+ (..multiplicity sample)
+ (n.= multiplicity))))))))
+
+ (implementation: .public hash
+ (All (_ a) (Hash (Set a)))
+
+ (def: &equivalence ..equivalence)
+
+ (def: (hash (^:representation set))
+ (let [[hash _] set]
+ (list\mix (function (_ [elem multiplicity] acc)
+ (|> elem (\ hash hash) (n.* multiplicity) (n.+ acc)))
+ 0
+ (dictionary.entries set)))))
)
(def: .public (member? set elem)