@@ -1657,6 +1657,7 @@ pub fn key_filter(
1657
1657
/// // -> Error(Nil)
1658
1658
/// ```
1659
1659
///
1660
+ @ deprecated ( "This function will be removed in the next gleam_stdlib version" )
1660
1661
pub fn pop (
1661
1662
in list : List ( a) ,
1662
1663
one_that is_desired : fn ( a) -> Bool ,
@@ -1697,6 +1698,7 @@ fn pop_loop(haystack, predicate, checked) {
1697
1698
/// // -> Error(Nil)
1698
1699
/// ```
1699
1700
///
1701
+ @ deprecated ( "This function will be removed in the next gleam_stdlib version" )
1700
1702
pub fn pop_map (
1701
1703
in haystack : List ( a) ,
1702
1704
one_that is_desired : fn ( a) -> Result ( b, c) ,
@@ -1743,13 +1745,20 @@ fn pop_map_loop(
1743
1745
/// ```
1744
1746
///
1745
1747
pub fn key_pop ( list : List ( # ( k, v) ) , key : k) -> Result ( # ( v, List ( # ( k, v) ) ) , Nil ) {
1746
- pop_map ( list , fn ( entry ) {
1747
- let # ( k , v ) = entry
1748
- case k == key {
1749
- True -> Ok ( v )
1750
- False -> Error ( Nil )
1751
- }
1752
- } )
1748
+ key_pop_loop ( list , key , [ ] )
1749
+ }
1750
+
1751
+ fn key_pop_loop (
1752
+ list : List ( # ( k, v) ) ,
1753
+ key : k,
1754
+ checked : List ( # ( k, v) ) ,
1755
+ ) -> Result ( # ( v, List ( # ( k, v) ) ) , Nil ) {
1756
+ case list {
1757
+ [ ] -> Error ( Nil )
1758
+ [ # ( k , v ) , .. rest ] if k == key ->
1759
+ Ok ( # ( v , reverse_and_prepend ( checked , rest ) ) )
1760
+ [ first , .. rest ] -> key_pop_loop ( rest , key , [ first , .. checked ] )
1761
+ }
1753
1762
}
1754
1763
1755
1764
/// Given a list of 2-element tuples, inserts a key and value into the list.
0 commit comments