module Language.Haskell.FreeTheorems.ValidSyntax where
import Data.Generics (Typeable, Data)
import Data.Maybe (mapMaybe)
import Language.Haskell.FreeTheorems.BasicSyntax
data ValidDeclaration = ValidDeclaration
{ ValidDeclaration -> Declaration
rawDeclaration :: Declaration
, ValidDeclaration -> Bool
isStrictDeclaration :: Bool
}
newtype ValidSignature = ValidSignature
{ ValidSignature -> Signature
rawSignature :: Signature
}
filterSignatures :: [ValidDeclaration] -> [ValidSignature]
filterSignatures :: [ValidDeclaration] -> [ValidSignature]
filterSignatures = forall a b. (a -> Maybe b) -> [a] -> [b]
mapMaybe ValidDeclaration -> Maybe ValidSignature
asSignature
where
asSignature :: ValidDeclaration -> Maybe ValidSignature
asSignature (ValidDeclaration Declaration
decl Bool
_) =
case Declaration
decl of
TypeSig Signature
sig -> forall a. a -> Maybe a
Just (Signature -> ValidSignature
ValidSignature Signature
sig)
Declaration
otherwise -> forall a. Maybe a
Nothing