{-# LANGUAGE RankNTypes #-} module Hhp.Syb ( listifySpans ) where import GHC (TypecheckedSource, Located, GenLocated(L), isGoodSrcSpan, spans) import Data.Generics listifySpans :: Typeable a => TypecheckedSource -> (Int, Int) -> [Located a] listifySpans :: TypecheckedSource -> (Int, Int) -> [Located a] listifySpans TypecheckedSource tcs (Int, Int) lc = ([Located a] -> [Located a] -> [Located a]) -> GenericQ [Located a] -> TypecheckedSource -> [Located a] forall r. (r -> r -> r) -> GenericQ r -> GenericQ r everything' [Located a] -> [Located a] -> [Located a] forall a. [a] -> [a] -> [a] (++) ([] [Located a] -> (Located a -> [Located a]) -> a -> [Located a] forall a b r. (Typeable a, Typeable b) => r -> (b -> r) -> a -> r `mkQ` (\Located a x -> [Located a x | Located a -> Bool forall e. GenLocated SrcSpan e -> Bool p Located a x])) TypecheckedSource tcs where p :: GenLocated SrcSpan e -> Bool p (L SrcSpan spn e _) = SrcSpan -> Bool isGoodSrcSpan SrcSpan spn Bool -> Bool -> Bool && SrcSpan spn SrcSpan -> (Int, Int) -> Bool `spans` (Int, Int) lc everything' :: (r -> r -> r) -> GenericQ r -> GenericQ r everything' :: (r -> r -> r) -> GenericQ r -> GenericQ r everything' r -> r -> r k GenericQ r f a x = (r -> r -> r) -> r -> [r] -> r forall (t :: * -> *) b a. Foldable t => (b -> a -> b) -> b -> t a -> b foldl r -> r -> r k (a -> r GenericQ r f a x) ([r] -> r) -> [r] -> r forall a b. (a -> b) -> a -> b $ GenericQ r -> a -> [r] forall a u. Data a => (forall d. Data d => d -> u) -> a -> [u] gmapQ ((r -> r -> r) -> GenericQ r -> GenericQ r forall r. (r -> r -> r) -> GenericQ r -> GenericQ r everything' r -> r -> r k GenericQ r f) a x