on master help sign in
Give Vect.findIndices & Co a more useful type
6b4c4d2Melvar Chen
libs/base/Data/Vect.idr+6−13
@@ -369,17 +369,10 @@ findIndex p [] = Nothing
369findIndex p (x :: xs) = if p x then Just 0 else map FS (findIndex p xs)
369findIndex p (x :: xs) = if p x then Just 0 else map FS (findIndex p xs)
370
370
371||| Find the indices of all elements that satisfy some test
371||| Find the indices of all elements that satisfy some test
372−findIndices : (a -> Bool) -> Vect m a -> (p ** Vect p Nat)
372+findIndices : (a -> Bool) -> Vect m a -> List (Fin m)
373−findIndices = findIndices' 0
374− where
375− total findIndices' : Nat -> (a -> Bool) -> Vect m a -> (p ** Vect p Nat)
376− findIndices' cnt p [] = (_ ** [])
373+findIndices p [] = []
377− findIndices' cnt p (x::xs) with (findIndices' (S cnt) p xs)
374+findIndices p (x :: xs) = let is = map FS $ findIndices p xs
378− | (_ ** tail) =
379− if p x then
375+ in if p x then 0 :: is else is
380− (_ ** cnt::tail)
381− else
382− (_ ** tail)
383
376
384elemIndexBy : (a -> a -> Bool) -> a -> Vect m a -> Maybe (Fin m)
377elemIndexBy : (a -> a -> Bool) -> a -> Vect m a -> Maybe (Fin m)
385elemIndexBy p e = findIndex $ p e
378elemIndexBy p e = findIndex $ p e
@@ -387,10 +380,10 @@ elemIndexBy p e = findIndex $ p e
387elemIndex : Eq a => a -> Vect m a -> Maybe (Fin m)
380elemIndex : Eq a => a -> Vect m a -> Maybe (Fin m)
388elemIndex = elemIndexBy (==)
381elemIndex = elemIndexBy (==)
389
382
390−elemIndicesBy : (a -> a -> Bool) -> a -> Vect m a -> (p ** Vect p Nat)
383+elemIndicesBy : (a -> a -> Bool) -> a -> Vect m a -> List (Fin m)
391elemIndicesBy p e = findIndices $ p e
384elemIndicesBy p e = findIndices $ p e
392
385
393−elemIndices : Eq a => a -> Vect m a -> (p ** Vect p Nat)
386+elemIndices : Eq a => a -> Vect m a -> List (Fin m)
394elemIndices = elemIndicesBy (==)
387elemIndices = elemIndicesBy (==)
395
388
396--------------------------------------------------------------------------------
389--------------------------------------------------------------------------------