module Main where import Test.TypeSpec import GHC.Generics import Generic.Type.Assert import Data.Kind data DSum = DSum1 () | DSum2 deriving stock Generic data DEnum = DEnum1 | DEnum2 | DEnum3 deriving stock Generic data DNonSum = DNonSum () () deriving stock Generic data DVoid deriving stock Generic main :: IO () main = print spec spec :: Expect '[ AssertPasses (GAssertNotVoid DSum) , AssertPasses (GAssertSum DSum) , AssertPasses (GAssertNotSum DNonSum) , AssertPasses (GAssertEnum DEnum) ] spec = Valid type AssertPasses a = Is a (() :: Constraint) -- can't write this because GHC finds the TypeError before type-spec --type AssertFails a = Isn't a (() :: Constraint)