例如,对于列表,如果我用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/

10-15 21:32