----------------------------------------------------------------------------- -- | -- Module : Test.StateMachine.TH -- Copyright : (C) 2017, ATS Advanced Telematic Systems GmbH, Li-yao Xia -- License : BSD-style (see the file LICENSE) -- -- Maintainer : Li-yao Xia <lysxia@gmail.com> -- Stability : provisional -- Portability : non-portable (GHC extensions) -- -- Template Haskell functions to derive common type classes for -- testing with quickcheck-state-machine. -- ----------------------------------------------------------------------------- module Test.StateMachine.TH ( -- * Special classes for @Action@ types deriveTestClasses -- ** Components , deriveHClasses , deriveHFunctor , deriveHFoldable , deriveHTraversable , deriveConstructors -- * Show , deriveShows , deriveShow , deriveShowUntyped -- * Shrink , mkShrinker ) where import Language.Haskell.TH (Dec, Name, Q) import Test.StateMachine.Types.Generics.TH import Test.StateMachine.Types.HFunctor.TH -- | Derive instances of -- 'Test.StateMachine.Types.HFunctor.HFunctor', -- 'Test.StateMachine.Types.HFunctor.HFoldable', -- 'Test.StateMachine.Types.HFunctor.HTraversable', -- 'Test.StateMachine.Types.Generics.Constructor'. deriveTestClasses :: Name -> Q [Dec] deriveTestClasses = (fmap (fmap concat . sequence) . sequence) [ deriveHClasses , deriveConstructors ]