我正在为我创建的数据类型编写一个"附加"函数(基本上处理"流").但是,这种数据类型有12种不同的构造函数,处理不同类型的"流",例如,无限,空,固定长度,可变长度,已经附加等.
输入类型和输出类型之间的逻辑有点复杂但并非如此令人难以置信.
我考虑过两种方法:
与广泛的类别匹配(可能通过包装在更简单的代理类型中),然后在这些匹配内匹配OR
只是模式匹配144个案例(12*12).对于特定的组合,我可以通过通配符匹配将此值减少到100,但这就是它.
我知道第二种方法更难以维护,但忽视这一点,GHC会发现第二种方法更容易优化吗?如果它可以使用简单的跳转表(或者可能是两个跳转表)进行第二种方法,我怀疑它会更快.但是,如果它进行线性检查,它将会慢得多.
GHC是否将模式匹配(甚至非常大的匹配)优化为恒定时间跳转表?
是的,GHC优化了这种模式匹配.前七个(我认为)构造函数通过指针标记得到优化.我相信其余的将由跳桌来处理.但144个案例听起来很难维护,你必须注意代码大小.你真的需要所有这些案件吗?