{-# LANGUAGE KindSignatures #-} ----------------------------------------------------------------------------- -- | -- Module : Test.StateMachine.Types.Generics -- 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) -- -- Datatype-generic utilities. -- ----------------------------------------------------------------------------- module Test.StateMachine.Types.Generics where -- | A constructor name is a string. newtype Constructor = Constructor String deriving (Eq, Ord) instance Show Constructor where show (Constructor c) = c -- | Extracting constructors from actions. class Constructors (act :: (* -> *) -> * -> *) where -- | Constructor of a given action. constructor :: act v a -> Constructor -- | Total number of constructors in the action type. nConstructors :: proxy act -> Int