-- -*- mode: haskell; -*- -- Begin copied material. -- :{ let redir varcmd = case break Data.Char.isSpace varcmd of (var,_:cmd) -> return $ unlines [":set -fno-print-bind-result", "tmp <- System.Directory.getTemporaryDirectory", "(f,h) <- System.IO.openTempFile tmp \"ghci\"", "sto <- GHC.Handle.hDuplicate System.IO.stdout", "GHC.Handle.hDuplicateTo h System.IO.stdout", "System.IO.hClose h", cmd, "GHC.Handle.hDuplicateTo sto System.IO.stdout", "let readFileNow f = readFile f >>= \\t->Data.List.length t `seq` return t", var++" <- readFileNow f", "System.Directory.removeFile f"] _ -> return "putStrLn \"usage: :redir \"" :def redir cmdHelp redir ":redir \t-- execute , redirecting stdout to " :} --- Integration with the hlint code style tool :{ :def hlint const $ return $ unlines [":unset +t +s", ":set -w", ":redir hlintvar1 :show modules", ":cmd return (\":! hlint \" ++ (concat $ Data.List.intersperse \" \" (map (fst . break (==',') . Data.List.drop 2 . snd . break (== '(')) $ lines hlintvar1)))", ":set +t +s -Wall"] :}