HaRe-0.7.0.3: src/Language/Haskell/Refact/Utils/RenamedSourceUtils.hs
{-# LANGUAGE ScopedTypeVariables #-}
-- |
--
-- This module contains utilities that operate on the GHC RenamedSource
--
module Language.Haskell.Refact.Utils.RenamedSourceUtils
(
getFreeVariables
) where
-- Modules from GHC
import qualified GHC as GHC
import qualified NameSet as GHC
import qualified Data.Generics as SYB
import qualified GHC.SYB.Utils as SYB
-- ---------------------------------------------------------------------
getFreeVariables :: (SYB.Data t, SYB.Typeable t) => t -> [GHC.NameSet]
getFreeVariables t = res
where
res = SYB.everythingStaged SYB.Renamer (++) []
([] `SYB.mkQ` bind) t
-- bind :: (SYB.Data a, SYB.Typeable a) => a -> [GHC.NameSet]
bind ((GHC.FunBind _ _ _ _ fvs _)::(GHC.HsBindLR GHC.Name GHC.Name)) = [fvs]
bind ((GHC.PatBind _ _ _ fvs _) ::(GHC.HsBindLR GHC.Name GHC.Name)) = [fvs]
bind _ = []