morpheus-graphql-client-0.17.0: src/Data/Morpheus/Client/Internal/Utils.hs
{-# LANGUAGE NoImplicitPrelude #-}
module Data.Morpheus.Client.Internal.Utils
( removeDuplicates,
isEnum,
)
where
import Data.Morpheus.Types.Internal.AST
( ConsD (..),
)
import Relude
removeDuplicates :: Eq a => [a] -> [a]
removeDuplicates = fst . splitDuplicates
-- elems -> (unique elements, duplicate elems)
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 :: [ConsD f] -> Bool
isEnum = all (null . cFields)