-- | Declares data types which describe valid declarations and valid type -- signatures. A declaration or type signature is valid when all checks (see -- "Language.Haskell.FreeTheorems.Frontend") were passed successfully. module Language.Haskell.FreeTheorems.ValidSyntax where import Data.Generics (Typeable, Data) import Data.Maybe (mapMaybe) import Language.Haskell.FreeTheorems.BasicSyntax -- | Marks a valid declaration. data ValidDeclaration = ValidDeclaration { rawDeclaration :: Declaration -- ^ Returns the declaration structure hidden in a valid declaration. , isStrictDeclaration :: Bool -- ^ Indicates whether the declarations declares or depends on an -- algebraic data type with strictness flag. } -- | Marks a valid type signature. newtype ValidSignature = ValidSignature { rawSignature :: Signature -- ^ Returns the signature structure hidden in a valid type signature. } -- | Extracts all type signatures from a list of declarations. filterSignatures :: [ValidDeclaration] -> [ValidSignature] filterSignatures = mapMaybe asSignature where asSignature (ValidDeclaration decl _) = case decl of TypeSig sig -> Just (ValidSignature sig) otherwise -> Nothing