Haskell有许多用于调试运行时性能问题的优秀工具,但是对于调试编译时性能问题,存在哪些工具/经验规则?
具体来说,我的一些代码中的约束解决程序花费了很长时间(从1-2秒到几分钟不等)。我很确定这是因为我如何在约束中使用类型家族,但我不知道在这种情况下什么样的东西是昂贵的,也不知道约束解决程序在哪里花费时间。我最好的猜测是,我对类型列表的操作之一是占用二次时间而不是线性时间。
让我们看看为什么我怀疑约束求解器的一个例子。在我的文件中,我有如下代码:
class ExampleClass a where
type ExampleType a
f :: ExampleType a