hs-inspector-0.1.0.0: src/Language/Haskell/Explorer.hs
module Language.Haskell.Explorer where
import Language.Haskell.Syntax
data EO = E HsExp | O HsQOp
exploreExprs f exprs = exploreEO f $ map (E) exprs
exploreEO f es = any f es || any (exploreEO' f) es
exploreEO' :: (EO -> Bool) -> EO -> Bool
exploreEO' f (E (HsInfixApp a b c)) = exploreEO f [E a, O b, E c]
exploreEO' f (E (HsApp a b)) = exploreEO f [E a, E b]
exploreEO' f (E (HsNegApp a)) = exploreEO f [E a]
exploreEO' f (E (HsLambda _ _ a)) = exploreEO f [E a]
exploreEO' f (E (HsList as)) = exploreExprs f as
exploreEO' f (E (HsListComp a _)) = exploreExprs f [a] --TODO
exploreEO' f (E (HsTuple as)) = exploreExprs f as
exploreEO' f (E (HsParen a)) = exploreExprs f [a]
exploreEO' f (E (HsIf a b c)) = exploreExprs f [a, b, c]
exploreEO' _ _ = False
topExprs (HsUnGuardedRhs e) = [e]
topExprs (HsGuardedRhss rhss) = rhss >>= \(HsGuardedRhs _ es1 es2) -> [es1, es2]