{-# 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 :: [a] -> [a]
removeDuplicates = ([a], [a]) -> [a]
forall a b. (a, b) -> a
fst (([a], [a]) -> [a]) -> ([a] -> ([a], [a])) -> [a] -> [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [a] -> ([a], [a])
forall a. Eq a => [a] -> ([a], [a])
splitDuplicates
splitDuplicates :: Eq a => [a] -> ([a], [a])
splitDuplicates :: [a] -> ([a], [a])
splitDuplicates = ([a], [a]) -> [a] -> ([a], [a])
forall a. Eq a => ([a], [a]) -> [a] -> ([a], [a])
collectElems ([], [])
where
collectElems :: Eq a => ([a], [a]) -> [a] -> ([a], [a])
collectElems :: ([a], [a]) -> [a] -> ([a], [a])
collectElems ([a], [a])
collected [] = ([a], [a])
collected
collectElems ([a]
collected, [a]
errors) (a
x : [a]
xs)
| a
x a -> [a] -> Bool
forall (f :: * -> *) a.
(Foldable f, DisallowElem f, Eq a) =>
a -> f a -> Bool
`elem` [a]
collected = ([a], [a]) -> [a] -> ([a], [a])
forall a. Eq a => ([a], [a]) -> [a] -> ([a], [a])
collectElems ([a]
collected, [a]
errors [a] -> [a] -> [a]
forall a. Semigroup a => a -> a -> a
<> [a
x]) [a]
xs
| Bool
otherwise = ([a], [a]) -> [a] -> ([a], [a])
forall a. Eq a => ([a], [a]) -> [a] -> ([a], [a])
collectElems ([a]
collected [a] -> [a] -> [a]
forall a. Semigroup a => a -> a -> a
<> [a
x], [a]
errors) [a]
xs
isEnum :: [ConsD f] -> Bool
isEnum :: [ConsD f] -> Bool
isEnum = (ConsD f -> Bool) -> [ConsD f] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all ([f] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null ([f] -> Bool) -> (ConsD f -> [f]) -> ConsD f -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ConsD f -> [f]
forall f. ConsD f -> [f]
cFields)