{-# LANGUAGE DataKinds #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE StandaloneDeriving #-} module Main where data Mode = A | B deriving (Show) data Settings (m :: Mode) where SettingsA :: Int -> Settings 'A SettingsB :: String -> Settings 'B deriving instance Show (Settings m) main :: IO () main = do putStrLn "done."