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