This repository was archived by the owner on Oct 4, 2020. It is now read-only.
File tree Expand file tree Collapse file tree 5 files changed +45
-8
lines changed
Expand file tree Collapse file tree 5 files changed +45
-8
lines changed Original file line number Diff line number Diff line change 2323 ],
2424 "dependencies" : {
2525 "purescript-maps" : " ^0.5.0"
26+ },
27+ "devDependencies" : {
28+ "purescript-assert" : " ~0.1.1" ,
29+ "purescript-console" : " ~0.1.1"
2630 }
2731}
Original file line number Diff line number Diff line change @@ -15,12 +15,12 @@ data Set a
1515
1616##### Instances
1717``` purescript
18- instance eqSet :: (Eq a) => Eq (Set a)
19- instance showSet :: (Show a) => Show (Set a)
20- instance ordSet :: (Ord a) => Ord (Set a)
21- instance monoidSet :: (Ord a) => Monoid (Set a)
22- instance semigroupSet :: (Ord a) => Semigroup (Set a)
23- instance foldableSet :: Foldable Set
18+ (Eq a) => Eq (Set a)
19+ (Show a) => Show (Set a)
20+ (Ord a) => Ord (Set a)
21+ (Ord a) => Monoid (Set a)
22+ (Ord a) => Semigroup (Set a)
23+ Foldable Set
2424```
2525
2626#### ` empty `
@@ -81,6 +81,14 @@ delete :: forall a. (Ord a) => a -> Set a -> Set a
8181
8282Delete a value from a set
8383
84+ #### ` fromFoldable `
85+
86+ ``` purescript
87+ fromFoldable :: forall f a. (Foldable f, Ord a) => f a -> Set a
88+ ```
89+
90+ Create a set from a foldable collection of elements
91+
8492#### ` toList `
8593
8694``` purescript
Original file line number Diff line number Diff line change 22 "private" : true ,
33 "scripts" : {
44 "postinstall" : " pulp dep install" ,
5- "build" : " pulp build && rimraf docs && pulp docs"
5+ "build" : " pulp build && pulp test && rimraf docs && pulp docs"
66 },
77 "devDependencies" : {
88 "pulp" : " ^4.0.2" ,
Original file line number Diff line number Diff line change @@ -12,6 +12,7 @@ module Data.Set
1212 , insert
1313 , member
1414 , delete
15+ , fromFoldable
1516 , toList
1617 , fromList
1718 , size
@@ -81,13 +82,17 @@ insert a (Set m) = Set (M.insert a unit m)
8182delete :: forall a . (Ord a ) => a -> Set a -> Set a
8283delete a (Set m) = Set (a `M.delete` m)
8384
85+ -- | Create a set from a foldable collection of elements
86+ fromFoldable :: forall f a . (Foldable f , Ord a ) => f a -> Set a
87+ fromFoldable = foldl (\m a -> insert a m) empty
88+
8489-- | Convert a set to a list
8590toList :: forall a . Set a -> List a
8691toList (Set m) = map fst (M .toList m)
8792
8893-- | Create a set from a list of elements
8994fromList :: forall a . (Ord a ) => List a -> Set a
90- fromList = foldl (\m a -> insert a m) empty
95+ fromList = fromFoldable
9196
9297-- | Find the size of a set
9398size :: forall a . Set a -> Int
Original file line number Diff line number Diff line change 1+ module Test.Main where
2+
3+ import Prelude
4+
5+ import Control.Monad.Eff.Console (log )
6+ import Test.Assert (assert )
7+
8+ import Data.Set (Set ())
9+ import Data.Set as S
10+
11+ main = do
12+ log " fromFoldable - empty"
13+ assert $ S .fromFoldable [] == S .empty :: Set Unit
14+
15+ log " fromFoldable - non empty"
16+ do let set = S .fromFoldable [0 , 1 , 1 , 2 ]
17+ assert $ S .size set == 3
18+ assert $ S .member 0 set
19+ assert $ S .member 1 set
20+ assert $ S .member 2 set
You can’t perform that action at this time.
0 commit comments