gpt4 book ai didi

debugging - Haskell:任何 debugShow 函数?

转载 作者:行者123 更新时间:2023-12-04 23:33:58 24 4
gpt4 key购买 nike

我想使用 Debug.Trace.trace 打印一些我知道是 Show 的东西。就像我在 Python 等中所做的一样。

一种解决方案是将“Show a => ”添加到我想要放置跟踪的函数的签名中,以及调用它的任何函数等中。

但是,如果我可以使用一些 debugShow 函数,如果值为 1 则调用 show ,否则返回 "--no show--" 或其他东西会更好。

这是我定义 DebugShow 失败的尝试(GHC 拒绝 "Duplicate instance declarations" ):

{-# LANGUAGE FlexibleInstances, UndecidableInstances, OverlappingInstances #-}

class DebugShow a where
debugShow :: a -> String

instance Show a => DebugShow a where
debugShow = show

instance DebugShow a where
debugShow = const "--no show--"

某种“不安全的 Actor ”也可以解决我的问题。

有什么建议吗?

注 - 这仅用于调试目的。我没有在任何完成的代码中使用它。

最佳答案

我对此并不完全确定,但我认为如果不向使用站点和确定每个类型变量的调用站点之间的整个调用链添加类上下文,这是不可能的。这样做的原因是可操作的:至少在 GHC 中,每个类都由字典实现。所以在使用站点我们需要一个用于 Showa 字典(如果存在的话)。但是为了得到这个,我们需要它从确定 a 的站点传递下来,这需要在所有中间函数的签名中包含一些东西。

关于debugging - Haskell:任何 debugShow 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1154362/

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