Skip to content
This repository was archived by the owner on Oct 4, 2020. It is now read-only.

Commit ab0fabc

Browse files
committed
Merge pull request #31 from LiamGoodacre/master
`fromFoldable` generalised `fromList`
2 parents e340bdd + 6b8ba18 commit ab0fabc

File tree

5 files changed

+45
-8
lines changed

5 files changed

+45
-8
lines changed

bower.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,9 @@
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
}

docs/Data/Set.md

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff 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

8282
Delete 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

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
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",

src/Data/Set.purs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff 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)
8182
delete :: forall a. (Ord a) => a -> Set a -> Set a
8283
delete 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
8590
toList :: forall a. Set a -> List a
8691
toList (Set m) = map fst (M.toList m)
8792

8893
-- | Create a set from a list of elements
8994
fromList :: 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
9398
size :: forall a. Set a -> Int

test/Test/Main.purs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
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

0 commit comments

Comments
 (0)