gpt4 book ai didi

haskell - 将 Leksah 调试器与使用 readLn 和类似程序的程序一起使用

转载 作者:行者123 更新时间:2023-12-04 12:12:34 25 4
gpt4 key购买 nike

我最近安装了 Leksah(Windows 7 64 位上的 0.10.0.4),这对于 Haskell 来说似乎是一个有趣的 IDE。但是,在使用程序时,当涉及到用户对程序的输入时,我显然忽略了一些东西。

我有一个非常简单的

do
printStr "Prompt: "
x <- readLn

阻止我的代码。当调试器点击 readLn 时,我希望能够在某处提供输入。但是,我找不到任何输入窗口。起初我预计可能会启用日志窗口,但我找不到与程序交互的地方。在 GHCi 中运行一切都符合预期,所以我确定它不是代码。

此外,当我只是执行“Package->Run”时,提示在其他日志输出到达之前不会变得可见(例如进行重建)。

过去在 Linux 上使用带有 Haskell 模式的 Emacs,我希望获得更友好的用户体验,这样我就可以让一些 Windows 程序员参与 Haskell 主题。我错过了什么吗?

最佳答案

从这个线程
http://groups.google.com/group/leksah/browse_thread/thread/7d3e3bf64e56f190/30278795c23b2168

这是一个我们尚未解决的已知问题。我们将 GCHi 命令发送到它的标准输入,但我们也没有很好的方法在那里发送用户输入。

我不确定我们应该如何解决这个问题。我们无法使用我们的命令 channel 将用户输入发送到正在调试的进程(我们的代码在发送命令之前等待来自 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 应该可以很好地处理任意输出。

关于haskell - 将 Leksah 调试器与使用 readLn 和类似程序的程序一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7425184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com