{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
module Data.Morpheus.Kind
( SCALAR
, OBJECT
, ENUM
, WRAPPER
, UNION
, INPUT_OBJECT
, KIND
) where
import Data.Map (Map)
import Data.Set (Set)
import Data.Text (Text)
import Data.Morpheus.Types.Resolver (Resolver)
type family KIND a :: *
data SCALAR
data OBJECT
data ENUM
data INPUT_OBJECT
data UNION
data WRAPPER
type instance KIND Text = SCALAR
type instance KIND Int = SCALAR
type instance KIND Float = SCALAR
type instance KIND Bool = SCALAR
type instance KIND (Maybe a) = WRAPPER
type instance KIND [a] = WRAPPER
type instance KIND (a, b) = WRAPPER
type instance KIND (Set a) = WRAPPER
type instance KIND (Map k v) = WRAPPER
type instance KIND (Resolver m a) = WRAPPER
type instance KIND (a -> b) = WRAPPER