{-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE KindSignatures #-} module Data.Morpheus.Server.Types.Types ( Undefined (..), Pair (..), MapKind (..), MapArgs (..), mapKindFromList, ) where import GHC.Generics (Generic) data Undefined (m :: * -> *) = Undefined deriving (Show, Generic) data Pair k v = Pair { key :: k, value :: v } deriving (Generic) newtype MapArgs k = MapArgs { oneOf :: Maybe [k] } deriving (Generic) data MapKind k v m = MapKind { size :: Int, pairs :: MapArgs k -> m [Pair k v] } deriving (Generic) mapKindFromList :: (Eq k, Applicative m) => [(k, v)] -> MapKind k v m mapKindFromList inputPairs = MapKind { size = length inputPairs, pairs = resolvePairs } where filterBy MapArgs {oneOf = Just list} = filter ((`elem` list) . fst) inputPairs filterBy _ = inputPairs resolvePairs = pure . (map toGQLTuple . filterBy) toGQLTuple (x, y) = Pair x y