39 lines
1.8 KiB
Text
39 lines
1.8 KiB
Text
: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}
|