Debugging 在Haskell中输出一个值,如果其类型不是Show实例,则为默认值
我试着调试一些箭头,这真的很难。最后我到处粘贴Debugging 在Haskell中输出一个值,如果其类型不是Show实例,则为默认值,debugging,haskell,Debugging,Haskell,我试着调试一些箭头,这真的很难。最后我到处粘贴trace,但它确实需要一个Show实例作为它的参数,这限制了它的使用。如果某个东西是show的一个实例,有没有办法显示它,如果不是,就使用某种默认输出值?我保证只用于调试;-) 人们是如何调试箭头的…最好的办法是在箭头中添加跟踪: strace x = trace (show x) x something :: (Num c, Show c, Arrow cat) => cat c c something = arr (+1) <&l
trace
,但它确实需要一个Show
实例作为它的参数,这限制了它的使用。如果某个东西是show的一个实例,有没有办法显示它,如果不是,就使用某种默认输出值?我保证只用于调试;-)
人们是如何调试箭头的…最好的办法是在箭头中添加跟踪:
strace x = trace (show x) x
something :: (Num c, Show c, Arrow cat) => cat c c
something = arr (+1) <<< arr strace
-- > something 1
-- 1
-- 2
strace x=trace(show x)x
某物::(数字c,显示c,箭头猫)=>猫c
something=arr(+1)你所说的“使用默认值”到底是什么意思?如果你有某种类型的函数Foo->String
,你可以在跟踪它之前将其应用到你的参数中。我有一个类似于arrf=SF的函数::(a->b)->arrab
,我想在其中粘贴一个trace
,以检查a
,但是它们并不总是属于Show
,因此我得到了一个类型错误。如果它们不属于Show,您希望发生什么?只是跟踪空字符串?是的,或者某种默认值,或者一种表达式步骤1)在GHC中实现实例链2)创建一个新类3)将类实例化为instance(Show a)=>NewShow a where NewShow=Show;实例,否则其中newShow=const“not a instance”
4)利润。谢谢,我这样做了,但我正在调试的问题太难了,即使是这样:(我想我稍后会试着问这个问题