module Language.Haskell.Tools.Refactor.Predefined.DollarApp2 where
import Language.Haskell.Tools.Refactor
import Control.Reference
import SrcLoc (RealSrcSpan)
import Unique (getUnique)
import Id (idName)
import PrelNames (dollarIdKey)
import PrelInfo (wiredInIds)
tryItOut :: String -> String -> IO ()
tryItOut = tryRefactor (localRefactoring . dollarApp)
dollarApp :: (HasImportInfo dom, HasModuleInfo dom) => RealSrcSpan -> LocalRefactoring dom
dollarApp sp = nodesContained sp !~ replaceExpr
replaceExpr :: (HasImportInfo dom, HasModuleInfo dom) => Expr dom -> LocalRefactor dom (Expr dom)
replaceExpr (App fun (Paren arg)) = mkInfixApp fun <$> referenceOperator dollarName <*> pure arg
replaceExpr e = pure e
[dollarName] = map idName $ filter ((dollarIdKey==) . getUnique) wiredInIds