@@ -22,6 +22,8 @@ module Data.Map
22
22
, fromFoldableWith
23
23
, toUnfoldable
24
24
, toAscUnfoldable
25
+ , toAscUnfoldableKeys
26
+ , toAscUnfoldableValues
25
27
, delete
26
28
, pop
27
29
, member
@@ -580,17 +582,43 @@ toAscUnfoldable m = unfoldr go (m : Nil) where
580
582
Three left k1 v1 mid k2 v2 right ->
581
583
go $ left : singleton k1 v1 : mid : singleton k2 v2 : right : tl
582
584
585
+ -- | Convert a map to an unfoldable structure of keys in ascending order.
586
+ toAscUnfoldableKeys :: forall f k v . Unfoldable f => Map k v -> f k
587
+ toAscUnfoldableKeys m = unfoldr go (m : Nil ) where
588
+ go Nil = Nothing
589
+ go (hd : tl) = case hd of
590
+ Leaf -> go tl
591
+ Two Leaf k _ Leaf ->
592
+ Just $ Tuple k tl
593
+ Two Leaf k _ right ->
594
+ Just $ Tuple k (right : tl)
595
+ Two left k v right ->
596
+ go $ left : singleton k v : right : tl
597
+ Three left k1 v1 mid k2 v2 right ->
598
+ go $ left : singleton k1 v1 : mid : singleton k2 v2 : right : tl
599
+
583
600
-- | Get a list of the keys contained in a map
584
601
keys :: forall k v . Map k v -> List k
585
- keys Leaf = Nil
586
- keys (Two left k _ right) = keys left <> pure k <> keys right
587
- keys (Three left k1 _ mid k2 _ right) = keys left <> pure k1 <> keys mid <> pure k2 <> keys right
602
+ keys = toAscUnfoldableKeys
603
+
604
+ -- | Convert a map to an unfoldable structure of values in ascending order of their corresponding keys.
605
+ toAscUnfoldableValues :: forall f k . Unfoldable f => Map k ~> f
606
+ toAscUnfoldableValues m = unfoldr go (m : Nil ) where
607
+ go Nil = Nothing
608
+ go (hd : tl) = case hd of
609
+ Leaf -> go tl
610
+ Two Leaf _ v Leaf ->
611
+ Just $ Tuple v tl
612
+ Two Leaf _ v right ->
613
+ Just $ Tuple v (right : tl)
614
+ Two left k v right ->
615
+ go $ left : singleton k v : right : tl
616
+ Three left k1 v1 mid k2 v2 right ->
617
+ go $ left : singleton k1 v1 : mid : singleton k2 v2 : right : tl
588
618
589
619
-- | Get a list of the values contained in a map
590
- values :: forall k v . Map k v -> List v
591
- values Leaf = Nil
592
- values (Two left _ v right) = values left <> pure v <> values right
593
- values (Three left _ v1 mid _ v2 right) = values left <> pure v1 <> values mid <> pure v2 <> values right
620
+ values :: forall k . Map k ~> List
621
+ values = toAscUnfoldableValues
594
622
595
623
-- | Compute the union of two maps, using the specified function
596
624
-- | to combine values for duplicate keys.
0 commit comments