{-# LANGUAGE NoImplicitPrelude #-} module Data.Morpheus.Client.Internal.Utils ( removeDuplicates, isEnum, ) where import Data.Morpheus.Client.Internal.Types ( ClientConstructorDefinition (cFields), ) import Relude removeDuplicates :: Eq a => [a] -> [a] removeDuplicates = fst . splitDuplicates splitDuplicates :: Eq a => [a] -> ([a], [a]) splitDuplicates = collectElems ([], []) where collectElems :: Eq a => ([a], [a]) -> [a] -> ([a], [a]) collectElems collected [] = collected collectElems (collected, errors) (x : xs) | x `elem` collected = collectElems (collected, errors <> [x]) xs | otherwise = collectElems (collected <> [x], errors) xs isEnum :: [ClientConstructorDefinition] -> Bool isEnum = all (null . cFields)