gpt4 book ai didi

haskell - 使用 gi-gtk 和 Reactive Banana 捕获 Haskell 异常

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

当然,我的应用程序没有错误,但以防万一它包含我想放入通用异常捕获器的任何底部值,它至少会弹出一个消息框告诉用户要报告哪种错误。因为我用的是gi-gtk我认为初始化后的任何异常都会发生在 Gtk.main 内部。函数,所以我的main结束函数看起来像这样:

let executeProgram =
catch Gtk.main $ \e -> do
reportThisBugDialog $ show (e :: SomeException)
-- Code here to try to recover to a known good state
executeProgram
executeProgram

我也在使用 Reactive Banana如果这是相关的,但这在 FRP 代码之外。

但是,这不会捕获任何异常。我把 error "Test Exception"在“Help About”的处理程序中,我的程序刚刚退出,并在控制台上打印了一条消息(我的用户当然不会看到)。

当我的代码对 GTK 信号使用react时,我如何捕获发生在我的代码中的异常?

最佳答案

有类似问题here (虽然它不是特定于 gi-gtk ,所以更通用)t。我也推荐this邮政。

基本上,haskell 异常不能通过 haskell/C 边界。仅仅是因为 C 对 haskell 异常一无所知。

在您的情况下,Gtk.main运行 gtk事件循环,用C实现,回调用haskell实现。当回调抛出haskell异常时,必须经过gtk事件循环以到达 executeProgram功能。但由于上述原因,这是不可能的。

恐怕,解决方案是在每个回调中捕获所有异常。在您的情况下,您可能可以在 on 上编写一个包装器。函数来自 gi-gtk ,它将捕获所有异常并显示错误对话框。

关于haskell - 使用 gi-gtk 和 Reactive Banana 捕获 Haskell 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50490280/

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