module ProjectM36.MiscUtils where

--returns duplicates of a pre-sorted list
dupes :: Eq a => [a] -> [a]    
dupes :: forall a. Eq a => [a] -> [a]
dupes [] = []
dupes [a
_] = []
dupes [a
x,a
y] = [a
x | a
x forall a. Eq a => a -> a -> Bool
== a
y]
dupes (a
x:a
y:[a]
xs) = forall a. Eq a => [a] -> [a]
dupes(a
xforall a. a -> [a] -> [a]
:[a
y]) forall a. [a] -> [a] -> [a]
++ forall a. Eq a => [a] -> [a]
dupes(a
y forall a. a -> [a] -> [a]
: [a]
xs)

--Data.Vector.indexed but for lists
indexed :: [a] -> [(Int, a)]
indexed :: forall a. [a] -> [(Int, a)]
indexed = forall {t} {b}. Num t => t -> [b] -> [(t, b)]
go Int
0
  where
    go :: t -> [b] -> [(t, b)]
go t
_ [] = []
    go t
i (b
v:[b]
ys) = (t
i,b
v)forall a. a -> [a] -> [a]
:t -> [b] -> [(t, b)]
go (t
iforall a. Num a => a -> a -> a
+t
1) [b]
ys