我最近在某处读过模式匹配发生在运行时而不是编译时。 (我正在寻找来源,但目前无法找到它。)这是真的吗?如果是这样,功能守卫有相同的表现吗?模式匹配比守卫更高性能吗?
读这对我来说令人惊讶,因为我曾经认为GHC能够在编译期间优化一些(可能不是全部)模式匹配决策。这是否发生?
一种示例情况:
f 1 = 3
f 2 = 4
VS
f' a | a == 1 = 3
| a == 2 = 4
做f
和f'
编译成相同数目的(在核心和/或较低例如)指令?
如果我在构造函数而不是值上匹配模式,情况会有什么不同吗?例如。如果GHC发现某个位置的函数总是用一个构造函数调用,那么它是否会以消除运行时检查的方式优化该调用?如果是这样,你能给我一个例子说明优化产生了什么?
综合
在性能方面,了解这两种方法有什么好处?
什么时候最好的性能?
您是在问如何从GHC获得核心产出,或者如何使用标准? – jberryman
相关:[Haskell GHC:与N个构造函数匹配的模式的时间复杂度是多少?](http://stackoverflow.com/q/9027384/2751851) – duplode
我倾向于认为模式匹配速度更快,考虑到“Eq”实例通常基于模式匹配。 – AJFarmar