God*_*eke 7 haskell windows-7 leksah
我最近安装了Leksah(Windows 7 64位上的0.10.0.4),这对于Haskell来说似乎是一个有趣的IDE.但是,当使用它时用户输入程序时,我显然忽略了一些东西.
我有一个非常简单的
do
printStr "Prompt: "
x <- readLn
Run Code Online (Sandbox Code Playgroud)
阻止我的代码.当调试器访问readLn时,我希望能够在某处提供输入.但是,我找不到任何输入窗口.我一开始期望可以启用日志窗口,但我无法找到与程序交互的任何地方.在GHCi中运行一切都如预期的那样,所以我确定它不是代码.
此外,当我只执行"Package-> Run"时,在某些其他日志输出到达之前(例如进行重建),提示不会显示.
过去在Linux上使用Emacs和Haskell模式,我希望有一个更加用户友好的体验,所以我可以让一些Windows程序员参与Haskell主题.我错过了什么吗?
小智 4
从这个线程 http://groups.google.com/group/leksah/browse_thread/thread/7d3e3bf64e56f190/30278795c23b2168
这是我们尚未解决的已知问题。我们将 GCHi 命令发送到其标准输入,但我们也没有好方法在那里发送用户输入。
我不知道我们应该如何解决这个问题。我们无法使用命令通道将用户输入发送到正在调试的进程(我们的代码在发送命令之前等待 ghci 的提示)。
如果我们设置某种方式将数据发送到 stdin 而不等待,它可能会干扰我们发送的 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
Run Code Online (Sandbox Code Playgroud)
(您需要将进程和网络添加到包依赖项中。然后 Ctrl+R 应添加所需的导入语句。)
这将允许交互,但保持标准输入畅通,以便 leksah 与 ghci 对话。理想情况下,您也应保持 stdout 和 stderr 清晰,并改为写入此套接字,但 Leksah 应该可以很好地处理任意输出。