例如,对于列表,如果我用LHS编写规则myFn [x]
,那么当程序员写入时它是否也能触发myFn (x:[])
?或者我是否必须为每种可能的语法编写单独的规则?
重写规则得到了消除.所以重写规则就像
{-# RULES
"myFn/singleton" forall x. myFn [x] = myOtherFn x
#-}
Run Code Online (Sandbox Code Playgroud)
将作为内部存储
forall x. myFn (x:[]) = myOtherFn x
Run Code Online (Sandbox Code Playgroud)
然后将其应用于程序的脱糖形式.(GHC中的所有优化都发生在程序的脱糖形式上).