67 lines · 1.7 KB · Text
RawDownload
module Data.SortedSet import Data.Maybeimport Data.SortedMap exportdata SortedSet k = SetWrapper (Data.SortedMap.SortedMap k ()) exportempty : Ord k => SortedSet kempty = SetWrapper Data.SortedMap.empty exportinsert : k -> SortedSet k -> SortedSet kinsert k (SetWrapper m) = SetWrapper (Data.SortedMap.insert k () m) exportdelete : k -> SortedSet k -> SortedSet kdelete k (SetWrapper m) = SetWrapper (Data.SortedMap.delete k m) exportcontains : k -> SortedSet k -> Boolcontains k (SetWrapper m) = isJust (Data.SortedMap.lookup k m) exportfromList : Ord k => List k -> SortedSet kfromList l = SetWrapper (Data.SortedMap.fromList (map (\i => (i, ())) l)) exporttoList : SortedSet k -> List ktoList (SetWrapper m) = map (\(i, _) => i) (Data.SortedMap.toList m) exportFoldable SortedSet where  foldr f e xs = foldr f e (Data.SortedSet.toList xs) ||| Set union. Inserts all elements of x into yexportunion : (x, y : SortedSet k) -> SortedSet kunion x y = foldr insert x y ||| Set difference. Delete all elments in y from xexportdifference : (x, y : SortedSet k) -> SortedSet kdifference x y = foldr delete x y ||| Set symmetric difference. Uses the union of the differences.exportsymDifference : (x, y : SortedSet k) -> SortedSet ksymDifference x y = union (difference x y) (difference y x) ||| Set intersection. Implemented as the difference of the union and the symetric difference.exportintersection : (x, y : SortedSet k) -> SortedSet kintersection x y = difference x (difference x y) exportOrd k => Semigroup (SortedSet k) where  (<+>) = union exportOrd k => Monoid (SortedSet k) where  neutral = empty exportkeySet : SortedMap k v -> SortedSet kkeySet = SetWrapper . map (const ())

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t