packages feed

HaRe 0.8.4.0 → 0.8.4.1

raw patch · 22 files changed

+117/−70 lines, 22 filesdep ~HaRedep ~basedep ~ghc-modPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: HaRe, base, ghc-mod, optparse-applicative

API changes (from Hackage documentation)

- Language.Haskell.Refact.Utils.Monad: instance Language.Haskell.GhcMod.Monad.Env.GmEnv Language.Haskell.Refact.Utils.Monad.RefactGhc
- Language.Haskell.Refact.Utils.Monad: instance Language.Haskell.GhcMod.Monad.Out.GmOut (Control.Monad.Trans.State.Lazy.StateT Language.Haskell.Refact.Utils.Monad.RefactState GHC.Types.IO)
- Language.Haskell.Refact.Utils.Monad: instance Language.Haskell.GhcMod.Monad.Out.GmOut GHC.Types.IO
- Language.Haskell.Refact.Utils.Monad: instance Language.Haskell.GhcMod.Monad.Out.GmOut Language.Haskell.Refact.Utils.Monad.RefactGhc
- Language.Haskell.Refact.Utils.Monad: instance Language.Haskell.GhcMod.Types.MonadIO (Control.Monad.Trans.State.Lazy.StateT Language.Haskell.Refact.Utils.Monad.RefactState GHC.Types.IO)
- Language.Haskell.Refact.Utils.Monad: instance Language.Haskell.GhcMod.Types.MonadIO Language.Haskell.Refact.Utils.Monad.RefactGhc
+ Language.Haskell.Refact.HaRe: [optStackBuildDeps] :: Options -> Bool
+ Language.Haskell.Refact.Utils.Monad: instance GhcMod.Monad.Env.GmEnv Language.Haskell.Refact.Utils.Monad.RefactGhc
+ Language.Haskell.Refact.Utils.Monad: instance GhcMod.Monad.Out.GmOut (Control.Monad.Trans.State.Lazy.StateT Language.Haskell.Refact.Utils.Monad.RefactState GHC.Types.IO)
+ Language.Haskell.Refact.Utils.Monad: instance GhcMod.Monad.Out.GmOut GHC.Types.IO
+ Language.Haskell.Refact.Utils.Monad: instance GhcMod.Monad.Out.GmOut Language.Haskell.Refact.Utils.Monad.RefactGhc
+ Language.Haskell.Refact.Utils.Monad: instance GhcMod.Types.MonadIO (Control.Monad.Trans.State.Lazy.StateT Language.Haskell.Refact.Utils.Monad.RefactState GHC.Types.IO)
+ Language.Haskell.Refact.Utils.Monad: instance GhcMod.Types.MonadIO Language.Haskell.Refact.Utils.Monad.RefactGhc
- Language.Haskell.Refact.API: getHsBind :: (Data a) => SimpPos -> String -> a -> Maybe (HsBind RdrName)
+ Language.Haskell.Refact.API: getHsBind :: (Data a) => SimpPos -> a -> Maybe (HsBind RdrName)
- Language.Haskell.Refact.HaRe: Options :: OutputOpts -> Programs -> [GHCOption] -> [(FilePath, Maybe FilePath)] -> String -> Options
+ Language.Haskell.Refact.HaRe: Options :: OutputOpts -> Programs -> [GHCOption] -> [(FilePath, Maybe FilePath)] -> String -> Bool -> Options
- Language.Haskell.Refact.HaRe: compGenApplicative :: FilePath -> String -> SimpPos -> RefactGhc [ApplyRefacResult]
+ Language.Haskell.Refact.HaRe: compGenApplicative :: FilePath -> SimpPos -> RefactGhc [ApplyRefacResult]
- Language.Haskell.Refact.HaRe: genApplicative :: RefactSettings -> Options -> FilePath -> String -> SimpPos -> IO [FilePath]
+ Language.Haskell.Refact.HaRe: genApplicative :: RefactSettings -> Options -> FilePath -> SimpPos -> IO [FilePath]
- Language.Haskell.Refact.Refactoring.GenApplicative: compGenApplicative :: FilePath -> String -> SimpPos -> RefactGhc [ApplyRefacResult]
+ Language.Haskell.Refact.Refactoring.GenApplicative: compGenApplicative :: FilePath -> SimpPos -> RefactGhc [ApplyRefacResult]
- Language.Haskell.Refact.Refactoring.GenApplicative: genApplicative :: RefactSettings -> Options -> FilePath -> String -> SimpPos -> IO [FilePath]
+ Language.Haskell.Refact.Refactoring.GenApplicative: genApplicative :: RefactSettings -> Options -> FilePath -> SimpPos -> IO [FilePath]
- Language.Haskell.Refact.Utils.Query: getHsBind :: (Data a) => SimpPos -> String -> a -> Maybe (HsBind RdrName)
+ Language.Haskell.Refact.Utils.Query: getHsBind :: (Data a) => SimpPos -> a -> Maybe (HsBind RdrName)

Files

ChangeLog view
@@ -1,3 +1,5 @@+2017-06-12 v0.8.4.1+	* Update for ghc-mod 5.8.0.0 2017-02-11 v0.8.4.0 	* Update for GHC 8.0.2 	* Use ghc-mod version to 5.7
HaRe.cabal view
@@ -1,5 +1,5 @@ Name:                           HaRe-Version:                        0.8.4.0+Version:                        0.8.4.1  Author:                         Chris Brown, Huiqing Li, Simon Thompson,                                 Alan Zimmerman, Stephen Adams@@ -125,8 +125,8 @@                                , directory                                , filepath                                , ghc-                               , ghc-exactprint == 0.5.3.*-                               , ghc-mod == 5.7.0.*+                               , ghc-exactprint >= 0.5.3.0+                               , ghc-mod == 5.8.0.*                                , ghc-syb-utils                                , hslogger                                , monad-control@@ -146,7 +146,7 @@         -- real	0m36.427s         -- user 0m41.448s         -- sys 0m2.544s-        GHC-Options:            -O0+        GHC-Options:            -O0 -Wall         Hs-Source-Dirs:         src         -- Other-Modules:          Paths_HaRe         Exposed-modules:@@ -188,17 +188,17 @@ Executable ghc-hare         Main-Is:                MainHaRe.hs         -- Other-Modules:          Paths_HaRe-        GHC-Options:            -O0+        GHC-Options:            -O0 -Wall         -- GHC-Options:            -prof -fprof-auto -rtsopts -caf-all         Hs-Source-Dirs:           ./app          -- GHC 7.10.2 ships with base 4.8.1.0         Build-Depends:          base >= 4.8.1.0  && < 5-                                , ghc-mod+                                , ghc-mod == 5.8.0.*                                 , gitrev >= 1.1                                 , mtl-                                , optparse-applicative+                                , optparse-applicative == 0.13.2.*                                 , optparse-simple                                 , Cabal                                 -- , Paths_HaRe@@ -213,7 +213,7 @@   ghc-options:       -O0       -- reinstate these later  -Wall-      -- -Wall+      -Wall       -- reinstate these later  -Werror       -- -fhpc       -- -fhpc -hpcdir dist/hpc/app-1.0@@ -270,8 +270,8 @@     , directory     , foldl     , ghc-    , ghc-exactprint == 0.5.3.*-    , ghc-mod == 5.7.0.*+    , ghc-exactprint >= 0.5.3.0+    , ghc-mod == 5.8.0.*     , ghc-syb-utils     , hslogger     , hspec@@ -286,7 +286,7 @@     , conversion-text     , parsec     , case-insensitive-    , HaRe >= 0.8.2.1+    , HaRe   Extensions:      CPP   if impl (ghc < 7.10.2)     buildable: False
app/MainHaRe.hs view
@@ -12,12 +12,10 @@ import           Language.Haskell.Refact.API import           Language.Haskell.Refact.HaRe import           Options.Applicative.Simple-import qualified Language.Haskell.GhcMod as GM+import qualified GhcMod as GM import qualified Paths_HaRe as Meta --- temporary until exposed by ghc-mod--- import           Options-import           Language.Haskell.GhcMod.Options.Options+import           GhcMod.Options.Options  main :: IO () main = do@@ -110,7 +108,7 @@                 | RenameCmd      FilePath String Row Col                 | AddOneParam    FilePath String Row Col                 | RmOneParam     FilePath Row Col-                | GenApplicative FilePath String Row Col+                | GenApplicative FilePath Row Col                 | DeleteDef      FilePath Row Col                deriving Show @@ -139,8 +137,8 @@ runCmd (RmOneParam fileName r c) (opt, gOpt)   = runFunc $ rmOneParameter opt gOpt fileName (r,c) -runCmd (GenApplicative fileName funNm r c) (opt, gOpt)-  = runFunc $ genApplicative opt gOpt fileName funNm (r,c)+runCmd (GenApplicative fileName r c) (opt, gOpt)+  = runFunc $ genApplicative opt gOpt fileName (r,c)  runCmd (DeleteDef fileName r c) (opt, gOpt)   = runFunc $ deleteDef opt gOpt fileName (r,c)@@ -295,10 +293,6 @@           ( metavar "FILE"          <> help "Specify Haskell file to process"           )-      <*> strArgument-            ( metavar "FUNNAME"-           <> help "The name of the function to be refactored"-            )       <*> argument auto             ( metavar "line"            <> help "The line the definition is on")
src/Language/Haskell/Refact/HaRe.hs view
@@ -41,4 +41,4 @@ import Language.Haskell.Refact.Refactoring.RoundTrip import Language.Haskell.Refact.Utils.Monad import Language.Haskell.Refact.Utils.Types-import qualified Language.Haskell.GhcMod as GM (Options(..),defaultOptions)+import qualified GhcMod as GM (Options(..),defaultOptions)
src/Language/Haskell/Refact/Refactoring/AddRmParam.hs view
@@ -12,8 +12,8 @@ import qualified Name                  as GHC import qualified Outputable            as GHC -import qualified Language.Haskell.GhcMod as GM-import Language.Haskell.GhcMod.Internal  as GM+import qualified GhcMod       as GM+import qualified GhcMod.Types as GM import Language.Haskell.Refact.API  import Language.Haskell.GHC.ExactPrint.Types
src/Language/Haskell/Refact/Refactoring/Case.hs view
@@ -11,7 +11,7 @@ import qualified BasicTypes    as GHC import qualified GHC           as GHC -import qualified Language.Haskell.GhcMod as GM (Options(..))+import qualified GhcMod as GM (Options(..)) import Language.Haskell.Refact.API  -- To be moved into HaRe API
src/Language/Haskell/Refact/Refactoring/DeleteDef.hs view
@@ -9,11 +9,11 @@ import qualified GHC import Control.Monad import Control.Monad.State-import Language.Haskell.GhcMod+import GhcMod import Language.Haskell.Refact.API import Data.Generics.Strafunski.StrategyLib.StrategyLib-import qualified Language.Haskell.GhcMod as GM-import qualified Language.Haskell.GhcMod.Internal as GM+import qualified GhcMod       as GM+import qualified GhcMod.Types as GM import System.Directory import Language.Haskell.GHC.ExactPrint import Language.Haskell.GHC.ExactPrint.Types
src/Language/Haskell/Refact/Refactoring/DupDef.hs view
@@ -11,13 +11,13 @@ import qualified GHC.SYB.Utils as SYB  import qualified GHC-import qualified RdrName               as GHC+import qualified RdrName       as GHC  import Data.List import Data.Maybe -import qualified Language.Haskell.GhcMod as GM-import Language.Haskell.GhcMod.Internal  as GM+import qualified GhcMod       as GM+import qualified GhcMod.Types as GM import Language.Haskell.Refact.API  import Language.Haskell.GHC.ExactPrint.Types
src/Language/Haskell/Refact/Refactoring/GenApplicative.hs view
@@ -4,7 +4,8 @@   (genApplicative, compGenApplicative) where  import Language.Haskell.Refact.API-import qualified Language.Haskell.GhcMod as GM+import qualified GhcMod       as GM+import qualified GhcMod.Types as GM import qualified GHC as GHC import qualified RdrName as GHC import System.Directory@@ -19,14 +20,14 @@ import Language.Haskell.GHC.ExactPrint.Print import Language.Haskell.GHC.ExactPrint.Parsers -genApplicative :: RefactSettings -> GM.Options -> FilePath -> String -> SimpPos -> IO [FilePath]-genApplicative settings cradle fileName funNm pos = do+genApplicative :: RefactSettings -> GM.Options -> FilePath -> SimpPos -> IO [FilePath]+genApplicative settings cradle fileName pos = do   absFileName <- canonicalizePath fileName-  runRefacSession settings cradle (compGenApplicative absFileName funNm pos)+  runRefacSession settings cradle (compGenApplicative absFileName pos) -compGenApplicative :: FilePath -> String -> SimpPos -> RefactGhc [ApplyRefacResult]-compGenApplicative fileName funNm pos = do-  (refRes@((_fp,ismod),_), ()) <- applyRefac (doGenApplicative fileName funNm pos) (RSFile fileName)+compGenApplicative :: FilePath -> SimpPos -> RefactGhc [ApplyRefacResult]+compGenApplicative fileName pos = do+  (refRes@((_fp,ismod),_), ()) <- applyRefac (doGenApplicative fileName pos) (RSFile fileName)   case ismod of     RefacUnmodifed -> error "Generalise to Applicative failed"     RefacModified -> return ()@@ -36,16 +37,19 @@ -- to an (OpApp :: HsExpr) -- The function begins by constructing the beginning of the applicative chain by looking at the construction of the return statement -doGenApplicative :: FilePath -> String -> SimpPos -> RefactGhc ()-doGenApplicative fileName funNm pos = do+doGenApplicative :: FilePath -> SimpPos -> RefactGhc ()+doGenApplicative fileName pos = do   parsed <- getRefactParsed-  let Just funBind = getHsBind pos funNm parsed-      (Just retRhs) = getReturnRhs funBind-      (Just doStmts) = getDoStmts funBind+  let funBind = case getHsBind pos parsed of+                  (Just fb) -> fb+                  Nothing -> error "That location is not the start of a function"+      (retRhs, doStmts) = case (getReturnRhs funBind, getDoStmts funBind) of+                            ((Just rets), (Just stmt)) -> (rets, stmt)+                            _ -> error "The function needs to consist of set of do statements with a return value."       boundVars = findBoundVars doStmts   checkPreconditions retRhs doStmts boundVars   appChain <- constructAppChain retRhs doStmts-  replaceFunRhs funNm pos appChain+  replaceFunRhs pos appChain   checkPreconditions :: ParsedExpr -> [GHC.ExprLStmt GHC.RdrName] -> [GHC.RdrName] -> RefactGhc ()@@ -87,8 +91,8 @@ gContains :: (Data t, Eq a, Data a) => a -> t -> Bool gContains item t = SYB.everything (||) (False `SYB.mkQ` (\b -> item == b)) t -replaceFunRhs :: String -> SimpPos -> ParsedLExpr -> RefactGhc ()-replaceFunRhs funNm pos newRhs = do+replaceFunRhs :: SimpPos -> ParsedLExpr -> RefactGhc ()+replaceFunRhs pos newRhs = do   parsed <- getRefactParsed   let rdrNm = locToRdrName pos parsed   case rdrNm of
src/Language/Haskell/Refact/Refactoring/MoveDef.hs view
@@ -31,7 +31,7 @@ import Data.List import Data.Maybe -import qualified Language.Haskell.GhcMod as GM+import qualified GhcMod as GM import Language.Haskell.Refact.API  import Language.Haskell.GHC.ExactPrint.Types
src/Language/Haskell/Refact/Refactoring/Renaming.hs view
@@ -21,7 +21,7 @@ import Language.Haskell.GHC.ExactPrint.Utils import Language.Haskell.Refact.API import System.Directory-import qualified Language.Haskell.GhcMod as GM (Options(..))+import qualified GhcMod as GM (Options(..)) import qualified Data.Map as Map  {-# ANN module "HLint: ignore Redunant do" #-}
src/Language/Haskell/Refact/Refactoring/RoundTrip.hs view
@@ -1,6 +1,6 @@ module Language.Haskell.Refact.Refactoring.RoundTrip(roundTrip) where -import qualified Language.Haskell.GhcMod as GM (Options(..))+import qualified GhcMod as GM (Options(..)) import Language.Haskell.Refact.API  import System.Directory
src/Language/Haskell/Refact/Refactoring/Simple.hs view
@@ -6,7 +6,7 @@  import qualified GHC           as GHC -import qualified Language.Haskell.GhcMod as GM (Options(..))+import qualified GhcMod as GM (Options(..)) import Language.Haskell.Refact.API  -- To be moved into HaRe API
src/Language/Haskell/Refact/Refactoring/SwapArgs.hs view
@@ -8,7 +8,7 @@ import qualified Name                  as GHC import qualified GHC -import qualified Language.Haskell.GhcMod as GM (Options(..))+import qualified GhcMod as GM (Options(..)) import Language.Haskell.Refact.API  import Data.Generics.Schemes
src/Language/Haskell/Refact/Utils/Monad.hs view
@@ -49,10 +49,11 @@ --import Data.Time.Clock import Distribution.Helper import Exception-import qualified Language.Haskell.GhcMod             as GM-import qualified Language.Haskell.GhcMod.Internal    as GM-import qualified Language.Haskell.GhcMod.Monad.Out   as GM-import qualified Language.Haskell.GhcMod.Monad.Types as GM+import qualified GhcMod             as GM+import qualified GhcMod.Monad.Out   as GM+import qualified GhcMod.Monad.Types as GM+import qualified GhcMod.Target      as GM+import qualified GhcMod.Types       as GM import Language.Haskell.Refact.Utils.Types import Language.Haskell.GHC.ExactPrint import Language.Haskell.GHC.ExactPrint.Utils
src/Language/Haskell/Refact/Utils/Query.hs view
@@ -25,8 +25,8 @@           varPat _ = Nothing  --Looks up the function binding at the given position. Returns nothing if the position does not contain a binding.-getHsBind :: (Data a) => SimpPos -> String -> a -> Maybe (GHC.HsBind GHC.RdrName)-getHsBind pos funNm a =+getHsBind :: (Data a) => SimpPos -> a -> Maybe (GHC.HsBind GHC.RdrName)+getHsBind pos a =   let rdrNm = locToRdrName pos a in   case rdrNm of   Nothing -> Nothing
src/Language/Haskell/Refact/Utils/TypeUtils.hs view
@@ -258,8 +258,8 @@   -- So ignore the packagekey for now   -- See https://github.com/DanielG/ghc-mod/issues/811   -- TODO: revisit this-  -- let eqModules (GHC.Module pk1 mn1) (GHC.Module pk2 mn2) = mn1 == mn2-  let eqModules (GHC.Module pk1 mn1) (GHC.Module pk2 mn2) = mn1 == mn2 && pk1 == pk2+  let eqModules (GHC.Module pk1 mn1) (GHC.Module pk2 mn2) = mn1 == mn2+  -- let eqModules (GHC.Module pk1 mn1) (GHC.Module pk2 mn2) = mn1 == mn2 && pk1 == pk2    gnames <- GHC.getNamesInScope   -- logm $ "equivalentNameInNewMod:gnames=" ++ showGhcQual (map (\n -> (GHC.nameModule n,n)) gnames)@@ -855,7 +855,8 @@        impDecl <- mkImpDecl        newSpan <- liftT uniqueSrcSpanT        let newImp = GHC.L newSpan impDecl-       liftT $ addSimpleAnnT newImp (DP (1,0)) [((G GHC.AnnImport),DP (0,0))]+           qAnns = getQualAnns alias qualify+       liftT $ addSimpleAnnT newImp (DP (1,0)) ([((G GHC.AnnImport),DP (0,0))]++qAnns)        return (GHC.L l p { GHC.hsmodImports = (imp++[newImp])})   where @@ -869,7 +870,10 @@        newEnts <- mkNewEntList idNames        let lNewEnts = GHC.L newSpan2 newEnts        -- logm $ "addImportDecl.mkImpDecl:adding anns for:" ++ showGhc lNewEnts-       liftT $ addSimpleAnnT lNewEnts (DP (0,1)) [((G GHC.AnnHiding),DP (0,0)),((G GHC.AnnOpenP),DP (0,1)),((G GHC.AnnCloseP),DP (0,0))]+           newEntsAnns = if hide+             then [((G GHC.AnnHiding),DP (0,0)),((G GHC.AnnOpenP),DP (0,1)),((G GHC.AnnCloseP),DP (0,0))]+             else [((G GHC.AnnOpenP),DP (0,0)),((G GHC.AnnCloseP),DP (0,0))]+       liftT $ addSimpleAnnT lNewEnts (DP (0,1)) newEntsAnns        let lmodname = GHC.L newSpan1 modName        liftT $ addSimpleAnnT lmodname (DP (0,1)) [((G GHC.AnnVal),DP (0,0))]        return $ GHC.ImportDecl@@ -887,6 +891,10 @@                                        else                                             (Just (hide, lNewEnts)))                         }+     getQualAnns Nothing _ = []+     getQualAnns (Just _) q = let cond = if q then [((G GHC.AnnQualified), DP (0,1))] else [] in+         [((G GHC.AnnAs), DP (0,1)),((G GHC.AnnVal), (DP (0,1)))] ++ cond+  -- --------------------------------------------------------------------- 
src/Language/Haskell/Refact/Utils/Utils.hs view
@@ -48,8 +48,9 @@ import Language.Haskell.GHC.ExactPrint.Print import Language.Haskell.GHC.ExactPrint.Utils -import qualified Language.Haskell.GhcMod          as GM-import qualified Language.Haskell.GhcMod.Internal as GM+import qualified GhcMod          as GM+import qualified GhcMod.Target   as GM+import qualified GhcMod.Types    as GM  import Language.Haskell.Refact.Utils.GhcModuleGraph import Language.Haskell.Refact.Utils.GhcVersionSpecific
test/Main.hs view
@@ -4,7 +4,7 @@ module Main where  import Control.Monad-import TestUtils+-- import TestUtils import qualified Turtle as Tu import qualified Control.Foldl as Fold @@ -45,7 +45,7 @@ resolver :: String resolver = #if __GLASGOW_HASKELL__ > 710-  "resolver: nightly-2016-08-25"+  "resolver: nightly-2017-05-23" #else   "resolver: lts-6.13" #endif
test/TestUtils.hs view
@@ -53,8 +53,8 @@ import Language.Haskell.GHC.ExactPrint.Parsers import Language.Haskell.GHC.ExactPrint.Types import Language.Haskell.GHC.ExactPrint.Utils-import qualified Language.Haskell.GhcMod as GM-import qualified Language.Haskell.GhcMod.Types as GM+import qualified GhcMod       as GM+import qualified GhcMod.Types as GM import Language.Haskell.Refact.Utils.Monad import Language.Haskell.Refact.Utils.MonadFunctions import Language.Haskell.Refact.Utils.Types
test/TypeUtilsSpec.hs view
@@ -3666,6 +3666,44 @@    -- --------------------------------------- +    it "adds an import entry that only imports a single name" $ do+      t <- ct $ parsedFileGhc "./TypeUtils/Empty.hs"+      let+        comp = do+         renamed1 <- getRefactRenamed+         parsed <- getRefactParsed+         let listModName  = GHC.mkModuleName "Data.List"+             rdr          = mkRdrName "head"+         res  <- addImportDecl parsed listModName Nothing False False False Nothing False [rdr]+         putRefactParsed res emptyAnns++         return (res,renamed1)+      ((_r,_r2),s) <- runRefactGhc comp (initialState { rsModule = initRefactModule [] t }) testOptions++      (sourceFromState s) `shouldBe` "module Empty where\nimport Data.List (head)\n\n"+++  -- ---------------------------------------++    it "adds a qualified import" $ do+      t <- ct $ parsedFileGhc "./TypeUtils/Empty.hs"+      let+        comp = do+         renamed1 <- getRefactRenamed+         parsed <- getRefactParsed+         let listModName  = GHC.mkModuleName "Data.List"+             qual = Just "List"+         res  <- addImportDecl parsed listModName Nothing False False True qual False []+         putRefactParsed res emptyAnns++         return (res,renamed1)+      ((_r,_r2),s) <- runRefactGhc comp (initialState { rsModule = initRefactModule [] t }) testOptions++      (sourceFromState s) `shouldBe` "module Empty where\nimport qualified Data.List as List\n\n"+++  -- ---------------------------------------+   describe "addItemsToImport" $ do     it "adds an item to an import entry with no items" $ do       t <- ct $ parsedFileGhc "./TypeUtils/JustImports.hs"
test/UtilsSpec.hs view
@@ -11,9 +11,8 @@ import Control.Exception import Control.Monad.State import Data.List-import Data.Maybe -import qualified Language.Haskell.GhcMod.Internal as GM (mpModule)+import qualified GhcMod.Types as GM (mpModule)  import Language.Haskell.GHC.ExactPrint.Utils import Language.Haskell.Refact.Refactoring.Renaming