调试Haskell组合链而不转换为全点表示



我了解到在Haskell社区中,无点样式是首选,因此我经常这样写表达式:

naive = (slugifyUnicode . T.take maxFilenameSize . T.pack . stripHtmlTags . T.unpack . plainToHtml) sfld

然而,在调试时,我发现自己反复将这样的表达式转换为$操作符链,以便使用trace的某些变体,并且我开始认为最好放弃无点风格,只是编写大量的$s开始,以便使调试不那么麻烦。毕竟,它们的字符数是相同的。

有没有人知道一种方法来调试长链的组合函数而不分解它们?

更一般地说,欢迎对这一不便提出任何意见。

对于任何具有Show实例的中间值,您可以使用traceShowIdinline:

naive = (slugifyUnicode . T.take maxFilenameSize . traceShowId . T.pack . stripHtmlTags . T.unpack .plainToHtml) sfld

如果中间值是String,可以用traceId代替。

对于任何没有Show实例的东西,你必须定义一个帮助器:

data CustomType = CustomType String
traceHelper :: CustomType -> CustomType
traceHelper s@(CustomType c) = trace c $ s
-- arbitrary functions we want to compose
a :: aIn -> CustomType
b :: CustomType -> bOut
c :: aIn -> bOut
c = b . traceHelper . a

最新更新