从这个线程
http://groups.google.com/group/leksah/browse_thread/thread/7d3e3bf64e56f190/30278795c23b2168
这是一个我们尚未解决的已知问题。我们将 GCHi 命令发送到它的标准输入,但我们也没有很好的方法在那里发送用户输入。
我不确定我们应该如何解决这个问题。我们无法使用我们的命令通道将用户输入发送到正在调试的进程(我们的代码在发送命令之前等待来自 ghci 的提示)。
如果我们设置了某种方式在不等待的情况下将数据发送到标准输入,它可能会干扰我们发送的 GHCi 命令(因为它仍然都在同一个管道上)。
我们需要确定是否有某种方法可以为 GHCi 本身和 GHCi 正在调试的程序提供单独的 stdin/stdout/stderr 管道。
同时,您可以让您的应用程序打开一个套接字或命名管道,并将输入从另一个终端写入。像这样的东西(未经测试)......
main = do
sock <- listenOn (PortNumber 8000)
-- Start a new terminal window (this command needs to be changed for OS X or Windows)
forkIO $ system "gnome-terminal -e \"telnet localhost 8000\""
(handle, _, _) <- accept sock -- Wait for the new terminal to connect
-- You might want to add a call to hSetBuffering here
line <- hGetLine handle
print line
sClose sock
(您需要将进程和网络添加到您的包依赖项中。然后 Ctrl+R 应该添加所需的导入语句。)
这将允许交互,但保持标准输入清晰,以便 leksah 与 ghci 对话。理想情况下,您也应该保持 stdout 和 stderr 清晰并写入此套接字,但 Leksah 应该可以很好地处理任意输出。