-type set(A) :: #{A => term()}.
-spec intersection(L :: set(A), R :: set(A)) -> set(A).
-spec is_element(X :: A, Set :: set(A)) -> boolean().
-spec is_empty(set(_)) -> boolean().
-spec map_subtract_keys(Map :: #{K => V}, KeysToRemove :: set(K)) -> #{K => V}.
-spec subtract(L :: set(A), R :: set(A)) -> set(A).
-spec take_element(A, #{A => []}) -> {found, #{A => []}} | not_found.
-spec to_map(set(K), V) -> #{K => V}.
-spec union([set(A)]) -> set(A).
-spec union(L :: set(A), R :: set(A)) -> set(A).