{-# LANGUAGE RankNTypes #-} module Hhp.Syb ( listifySpans, ) where import GHC (GenLocated (L), TypecheckedSource, isGoodSrcSpan, spans) import Data.Generics (GenericQ, Typeable, gmapQ, mkQ) import Hhp.Gap listifySpans :: Typeable a => TypecheckedSource -> (Int, Int) -> [LOC a] listifySpans :: forall a. Typeable a => TypecheckedSource -> (Int, Int) -> [LOC a] listifySpans TypecheckedSource tcs (Int, Int) lc = ([LOC a] -> [LOC a] -> [LOC a]) -> GenericQ [LOC a] -> GenericQ [LOC a] forall r. (r -> r -> r) -> GenericQ r -> GenericQ r everything' [LOC a] -> [LOC a] -> [LOC a] forall a. [a] -> [a] -> [a] (++) ([] [LOC a] -> (LOC a -> [LOC a]) -> a -> [LOC a] forall a b r. (Typeable a, Typeable b) => r -> (b -> r) -> a -> r `mkQ` (\LOC a x -> [LOC a x | LOC a -> Bool forall {a} {e}. GenLocated (SrcSpanAnn' a) e -> Bool p LOC a x])) TypecheckedSource Bag (GenLocated SrcSpanAnnA (HsBindLR GhcTc GhcTc)) tcs where p :: GenLocated (SrcSpanAnn' a) e -> Bool p (L SrcSpanAnn' a spn e _) = SrcSpan -> Bool isGoodSrcSpan (SrcSpanAnn' a -> SrcSpan forall a. SrcSpanAnn' a -> SrcSpan locA SrcSpanAnn' a spn) Bool -> Bool -> Bool && (SrcSpanAnn' a -> SrcSpan forall a. SrcSpanAnn' a -> SrcSpan locA SrcSpanAnn' a spn) SrcSpan -> (Int, Int) -> Bool `spans` (Int, Int) lc everything' :: (r -> r -> r) -> GenericQ r -> GenericQ r everything' :: forall r. (r -> r -> r) -> GenericQ r -> GenericQ r everything' r -> r -> r k GenericQ r f a x = (r -> r -> r) -> r -> [r] -> r forall b a. (b -> a -> b) -> b -> [a] -> b 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] forall u. (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 a -> r GenericQ r f) a x