module Importify.Syntax.Scoped
( InScoped
, anyAnnotation
, pullScopedInfo
, scopedNameInfo
, unscope
) where
import Universum
import Language.Haskell.Exts (Annotated (ann), SrcSpanInfo (..))
import Language.Haskell.Names (NameInfo, Scoped (..))
type InScoped t = t (Scoped SrcSpanInfo)
scopedNameInfo :: Scoped l -> NameInfo l
scopedNameInfo (Scoped info _) = info
pullScopedInfo :: Annotated ast => ast (Scoped l) -> NameInfo l
pullScopedInfo = scopedNameInfo . ann
unscope :: Functor f => f (Scoped l) -> f l
unscope = fmap $ \case Scoped _ l -> l
anyAnnotation :: (NameInfo l -> Bool) -> [Scoped l] -> Bool
anyAnnotation used = any used . map scopedNameInfo