#5162: Add Int index functions to Data.Set
--------------------------------+-------------------------------------------
  Reporter:  sacundim           |          Owner:  sacundim        
      Type:  feature request    |         Status:  closed          
  Priority:  normal             |      Milestone:                  
 Component:  libraries (other)  |        Version:  7.0.3           
Resolution:  wontfix            |       Keywords:  Data.Set        
  Testcase:                     |      Blockedby:                  
Difficulty:                     |             Os:  Unknown/Multiple
  Blocking:                     |   Architecture:  Unknown/Multiple
   Failure:  None/Unknown       |  
--------------------------------+-------------------------------------------

Comment(by tibbe):

 Some comment regarding the actual patch:

 {{{
 +lookupIndex :: Ord a => a -> Set a -> Maybe Int
 +lookupIndex k = k `seq` go 0
 +  where
 +    go idx Tip  = idx `seq` Nothing
 +    go idx (Bin _ kx l r)
 +      = idx `seq` case compare k kx of
 +          LT -> go idx l
 +          GT -> go (idx + size l + 1) r
 +          EQ -> Just (idx + size l)
 }}}

 The last line is too lazy, it will create a thunk containing `(idx + size
 l)`.

 {{{
 +elemAt :: Int -> Set a -> a
 +elemAt _ Tip = error "Set.elemAt: index out of range"
 +elemAt i (Bin _ kx l r)
 +  = case compare i sizeL of
 +      LT -> elemAt i l
 +      GT -> elemAt (i-sizeL-1) r
 +      EQ -> kx
 +  where
 +    sizeL = size l
 }}}

 This function would be more efficient if it was strict in `i`, which it
 isn't due to the first equation.

 {{{
 +deleteAt :: Int -> Set a -> Set a
 +deleteAt i0 t = i0 `seq` go i0 t
 + where
 +    go _ Tip = error "Set.deleteAt: index out of range"
 +    go i (Bin sx kx l r) = case compare i sizeL of
 +      LT -> balance kx (go i l) r
 +      GT -> balance kx l (go (i-sizeL-1) r)
 +      EQ -> glue l r
 +      where
 +        sizeL = size l
 }}}

 Same here, could be stricter in `i`.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/5162#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler

_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to