-module(gleamy@set). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([new/1, insert/2, contains/2, delete/2, filter/2, fold/3, intersection/2, union/2, difference/2, count/1, from_list/2, to_list/1]). -file("/home/julian/projects/gleamy_structures/src/gleamy/set.gleam", 14). -spec new(fun((ICI, ICI) -> gleam@order:order())) -> gleamy@red_black_tree_set:set(ICI). new(Compare) -> gleamy@red_black_tree_set:new(Compare). -file("/home/julian/projects/gleamy_structures/src/gleamy/set.gleam", 19). -spec insert(gleamy@red_black_tree_set:set(ICK), ICK) -> gleamy@red_black_tree_set:set(ICK). insert(Set, Member) -> gleamy@red_black_tree_set:insert(Set, Member). -file("/home/julian/projects/gleamy_structures/src/gleamy/set.gleam", 24). -spec contains(gleamy@red_black_tree_set:set(ICN), ICN) -> boolean(). contains(Set, Member) -> case gleamy@red_black_tree_set:find(Set, Member) of {ok, _} -> true; {error, _} -> false end. -file("/home/julian/projects/gleamy_structures/src/gleamy/set.gleam", 32). -spec delete(gleamy@red_black_tree_set:set(ICP), ICP) -> gleamy@red_black_tree_set:set(ICP). delete(Set, Member) -> gleamy@red_black_tree_set:delete(Set, Member). -file("/home/julian/projects/gleamy_structures/src/gleamy/set.gleam", 38). -spec filter(gleamy@red_black_tree_set:set(ICS), fun((ICS) -> boolean())) -> gleamy@red_black_tree_set:set(ICS). filter(Set, Property) -> gleamy@red_black_tree_set:fold( Set, Set, fun(Set@1, I) -> case Property(I) of true -> Set@1; false -> gleamy@red_black_tree_set:delete(Set@1, I) end end ). -file("/home/julian/projects/gleamy_structures/src/gleamy/set.gleam", 49). -spec fold(gleamy@red_black_tree_set:set(ICV), ICX, fun((ICX, ICV) -> ICX)) -> ICX. fold(Set, Initial, Reducer) -> gleamy@red_black_tree_set:fold(Set, Initial, Reducer). -file("/home/julian/projects/gleamy_structures/src/gleamy/set.gleam", 54). -spec intersection( gleamy@red_black_tree_set:set(ICY), gleamy@red_black_tree_set:set(ICY) ) -> gleamy@red_black_tree_set:set(ICY). intersection(First, Second) -> gleamy@red_black_tree_set:fold( Second, gleamy@red_black_tree_set:clear(First), fun(A, I) -> case gleamy@red_black_tree_set:find(First, I) of {ok, _} -> gleamy@red_black_tree_set:insert(A, I); {error, _} -> A end end ). -file("/home/julian/projects/gleamy_structures/src/gleamy/set.gleam", 64). -spec union( gleamy@red_black_tree_set:set(IDC), gleamy@red_black_tree_set:set(IDC) ) -> gleamy@red_black_tree_set:set(IDC). union(First, Second) -> gleamy@red_black_tree_set:fold( First, Second, fun(A, I) -> gleamy@red_black_tree_set:insert(A, I) end ). -file("/home/julian/projects/gleamy_structures/src/gleamy/set.gleam", 70). -spec difference( gleamy@red_black_tree_set:set(IDG), gleamy@red_black_tree_set:set(IDG) ) -> gleamy@red_black_tree_set:set(IDG). difference(Set, Removal) -> gleamy@red_black_tree_set:fold( Removal, Set, fun(Set@1, I) -> gleamy@red_black_tree_set:delete(Set@1, I) end ). -file("/home/julian/projects/gleamy_structures/src/gleamy/set.gleam", 76). -spec count(gleamy@red_black_tree_set:set(any())) -> integer(). count(Set) -> gleamy@red_black_tree_set:fold(Set, 0, fun(A, _) -> A + 1 end). -file("/home/julian/projects/gleamy_structures/src/gleamy/set.gleam", 81). -spec from_list(list(IDM), fun((IDM, IDM) -> gleam@order:order())) -> gleamy@red_black_tree_set:set(IDM). from_list(Members, Compare) -> gleam@list:fold( Members, gleamy@red_black_tree_set:new(Compare), fun gleamy@red_black_tree_set:insert/2 ). -file("/home/julian/projects/gleamy_structures/src/gleamy/set.gleam", 86). -spec to_list(gleamy@red_black_tree_set:set(IDP)) -> list(IDP). to_list(Set) -> gleamy@red_black_tree_set:foldr(Set, [], fun(A, I) -> [I | A] end).