例如,对于列表,如果我用myFn [x]
的LHS编写规则,那么当程序员编写myFn (x:[])
时,它也能够触发吗?还是我必须为每种可能的语法编写单独的规则?
最佳答案
重新编写规则变得毫无意义。所以像这样的重写规则
{-# RULES
"myFn/singleton" forall x. myFn [x] = myOtherFn x
#-}
将在内部存储为
forall x. myFn (x:[]) = myOtherFn x
然后将其应用于程序的已删除形式。 (GHC中的所有优化都在程序的已废止形式上进行)。
关于haskell - GHC重写规则是否知道可识别语法糖?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27320223/