例如,假设我希望实现一个汇总Num
s 列表的函数。在编写代码的中途,我希望使用以下命令对其进行调试Debug.Trace
:
module T where
import Debug.Trace
dosum :: (Num a) => [a] -> a
dosum xs = dosum' 0 xs
where
dosum' n [] = n
dosum' n (x:xs) = trace (show n) $ dosum' (n+x) xs
问题是这不会编译:
Could not deduce (Show a) arising from a use of dosum'
from the context (Num a)
(Show a)
当我完成调试时,我可以添加dosum
然后删除它(在现实生活中,我希望有一个不一定是 in 的类型Show
,但我会使用整数进行调试)。如果涉及到一些函数并且我不断添加删除Show a
语句,这可能会变得很麻烦。
我想要一个功能unsafeShow
unsafeShow :: a -> String
如果是,则有效,如果a
不是Show a
,则可以自由崩溃。这可能吗?