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

Commit 338ccdb

Browse files
authored
Merge pull request #77 from joneshf/relax-traversable-constraint
Relax traversable constraint
2 parents 079c2fb + e5331b2 commit 338ccdb

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

src/Data/Map.purs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import Data.List (List(..), (:), length, nub)
4141
import Data.Maybe (Maybe(..), maybe, isJust, fromMaybe)
4242
import Data.Monoid (class Monoid)
4343
import Data.Traversable (traverse, class Traversable)
44-
import Data.Tuple (Tuple(..), uncurry, snd)
44+
import Data.Tuple (Tuple(Tuple), snd)
4545
import Data.Unfoldable (class Unfoldable, unfoldr)
4646

4747
import Partial.Unsafe (unsafePartial)
@@ -77,8 +77,21 @@ instance foldableMap :: Foldable (Map k) where
7777
foldr f z m = foldr f z (values m)
7878
foldMap f m = foldMap f (values m)
7979

80-
instance traversableMap :: Ord k => Traversable (Map k) where
81-
traverse f ms = foldr (\x acc -> union <$> x <*> acc) (pure empty) ((map (uncurry singleton)) <$> (traverse f <$> toList ms))
80+
instance traversableMap :: Traversable (Map k) where
81+
traverse f Leaf = pure Leaf
82+
traverse f (Two left k v right) =
83+
Two <$> traverse f left
84+
<*> pure k
85+
<*> f v
86+
<*> traverse f right
87+
traverse f (Three left k1 v1 mid k2 v2 right) =
88+
Three <$> traverse f left
89+
<*> pure k1
90+
<*> f v1
91+
<*> traverse f mid
92+
<*> pure k2
93+
<*> f v2
94+
<*> traverse f right
8295
sequence = traverse id
8396

8497
-- | Render a `Map` as a `String`

0 commit comments

Comments
 (0)