Debugging 为什么`traceId`返回消息字符串本身?

Debugging 为什么`traceId`返回消息字符串本身?,debugging,haskell,Debugging,Haskell,我发现返回消息字符串本身非常奇怪。为什么会有人想这么做 是否有一种常见的情况下,traceId会派上用场?编辑: 感谢David,他提请注意我的traceId'正是traceShowId 因此,traecId只是多态的traceShowId::Show a->a->a的String->String单态版本,它还将打印的字符串从引号中删除 旧答案: 解释traceId的一种方法是,它是一个字符串——一个更通用的traceId'的专用版本,不在stdlib中: traceId':显示a=>a->a

我发现返回消息字符串本身非常奇怪。为什么会有人想这么做

是否有一种常见的情况下,
traceId
会派上用场?

编辑:

感谢David,他提请注意我的
traceId'
正是
traceShowId

因此,
traecId
只是多态的
traceShowId::Show a->a->a
String->String
单态版本,它还将打印的字符串从引号中删除

旧答案:

解释
traceId
的一种方法是,它是一个
字符串
——一个更通用的
traceId'
的专用版本,不在stdlib中:

traceId':显示a=>a->a
traceId'x=跟踪(显示x)x
所以

traceId=traceId':字符串->字符串
示例:

my=id;func=id;链=id;值=3
main=do
打印$length$traceId“链被调用!”
打印$length$traceId'[1,2,3]

但是由于某种原因,
traceId
的通用版本,我称之为
traceId'
,不在stdlib中。

traceMsg=trace
..@ErikAllik:对不起,我编辑了这个问题。哼哼。。。有趣的景色。(顺便说一句,从技术上讲,
traceId'
String
的情况下并不完全是
traceId
,因为
traceId
使用
id
而不是
show
,这意味着打印时字符串是不带空格和引号的)我想原因更多的是出于一致性考虑
traceId
应该和它的名字一模一样--
trace
的第一个参数与第二个参数相同。事实上,我很好奇是否有人能对
traceId
给出更好的解释-比如为什么它不
首先显示a=>a
。我认为
traceId'
traceShowId
,在
Debug.Trace
中,
traceId'
/
traceShowId
会有双引号,而
traceId
(我怀疑)不会。但我还没试过。