{-# LANGUAGE DataKinds, TypeFamilies #-} {-# LANGUAGE StandaloneDeriving, FlexibleInstances #-} {-# LANGUAGE Strict #-} module Language.Coformat.Descr where import qualified Data.Text as T import Data.Void import Numeric.Natural data Stage = Parsed | Supported | Value type family CTData f ty where CTData 'Parsed _ = () CTData 'Supported Void = Void CTData 'Supported _ = () CTData 'Value ty = ty data ConfigTypeT f = CTInt (CTData f Int) | CTUnsigned (CTData f Natural) | CTBool (CTData f Bool) | CTString (CTData f Void) | CTStringVec (CTData f Void) | CTRawStringFormats (CTData f Void) | CTIncludeCats (CTData f Void) | CTEnum { variants :: [T.Text], enumValue :: CTData f T.Text } deriving instance Show (ConfigTypeT 'Parsed) deriving instance Show (ConfigTypeT 'Supported) deriving instance Show (ConfigTypeT 'Value) deriving instance Eq (ConfigTypeT 'Value) data ConfigItemT f = ConfigItem { name :: [T.Text] , value :: ConfigTypeT f } deriving instance Show (ConfigItemT 'Parsed) deriving instance Show (ConfigItemT 'Supported) deriving instance Show (ConfigItemT 'Value)