Я пытаюсь установить «мост» между моим кодом на Haskell и интерактивным процессом командной строки.Точнее говоря, я пытаюсь запустить Elm REPL и отправить / получить через stdin / stdout.Я не был уверен, какую именно библиотеку использовать для этого, но я выбрал typed-process
.
Проблема, с которой я столкнулся, заключается в том, что моя программа на Haskell заканчивается (или завершается)пока процесс REPL все еще работает.Как мне избежать этого?
Кроме того, другая проблема заключается в том, что процесс REPL не получает никакого ввода от дескриптора stdin.
Мой текущий код выглядит следующим образом:
run :: Document -> IO (Result () Text)
run (Document moduleName tests) = do
let config = createConfig
p <- startProcess config
hSetBuffering (getStdin p) NoBuffering
hSetBuffering (getStdout p) NoBuffering
Data.Text.IO.hPutStr (getStdin p) "True\n"
Data.Text.IO.hGetChunk (getStdout p) >>= print
_ <- waitExitCode p
return (Ok ())
{-| Config for process.
-}
createConfig =
shell "elm repl"
|> setStdin createPipe
|> setStdout createPipe
|> setStderr closed