about summary refs log tree commit diff
path: root/third_party/bazel/rules_haskell/haskell/assets/ghci_script
blob: ddf9e7917482b2108757e7057f4aaf8bd9e00fb7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
: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}