:add {ADD_SOURCES} :module + System.IO GHC.IO.Handle Control.Exception System.Directory import qualified GHC.IO.Handle as Handle import qualified System.IO as IO import qualified System.Directory as Dir rules_haskell_stdout_dupe <- Handle.hDuplicate IO.stdout :{ (rules_haskell_stdout_copy_file, rules_haskell_stdout_copy_h) <- do rules_haskell_tmp_dir <- Dir.getTemporaryDirectory Prelude.>>= Dir.canonicalizePath (rules_haskell_fn, rules_haskell_h) <- IO.openTempFile rules_haskell_tmp_dir "rules-haskell-ghci-repl" Handle.hDuplicateTo rules_haskell_h IO.stdout Prelude.return (rules_haskell_fn, rules_haskell_h) :} :show modules :{ rules_haskell_loaded_modules <- do Handle.hClose rules_haskell_stdout_copy_h -- I had to do it like this because flushing and then searching in the -- stream at offset 0 did not work (no data is there, although the -- corresponding file certainly contained it after flushing). Couldn't -- figure this one out, so we first close the file and then read from it. rules_haskell_h <- IO.openFile rules_haskell_stdout_copy_file IO.ReadMode rules_haskell_xs <- Handle.hGetContents rules_haskell_h Dir.removeFile rules_haskell_stdout_copy_file Prelude.return Prelude.$ Prelude.takeWhile (Prelude./= ' ') Prelude.<$> Prelude.lines rules_haskell_xs :} hDuplicateTo rules_haskell_stdout_dupe IO.stdout :{ let rules_haskell_add_loaded_modules _ = Prelude.return Prelude.$ ":module + " Prelude.++ Data.List.intercalate " " (("*" Prelude.++) Prelude.<$> rules_haskell_loaded_modules) :} :module - System.IO GHC.IO.Handle Control.Exception System.Directory :def rules_haskell_add_loaded_modules rules_haskell_add_loaded_modules :rules_haskell_add_loaded_modules :undef rules_haskell_add_loaded_modules -- reload modules to drop the rules_haskell* definitions :reload {COMMANDS}