Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging 在Haskell中输出一个值,如果其类型不是Show实例,则为默认值_Debugging_Haskell - Fatal编程技术网

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)利润。谢谢,我这样做了,但我正在调试的问题太难了,即使是这样:(我想我稍后会试着问这个问题