module Bio.Util.Nub ( nubHash, nubHashBy )where
import BasePrelude
import Data.Hashable ( Hashable )
import qualified Data.HashSet as H
nubHash :: (Hashable a, Eq a) => [a] -> [a]
nubHash = nubHashBy id
nubHashBy :: (Hashable b, Eq b) => (a -> b) -> [a] -> [a]
nubHashBy f = go H.empty
where
go _ [] = []
go h (x:xs) | f x `H.member` h = go h xs
| otherwise = x : go (H.insert (f x) h) xs