爲什麼Haskell需要多個重寫規則,具體取決於函數組合技術和長度?有沒有辦法避免這種情況?Haskell重寫規則和函數組合
例如,假設下面的代碼...
{-# RULES
"f/f" forall a. f (f a) = 4*a
#-}
f a = 2 * a
這個工程的
test1 = f (f 1)
但是我們需要添加一個規則
test2 = f . f $ 1
和
test3 = f $ f 1
留給我們的規則如下
{-# RULES
"f/f1" forall a. f (f a) = 4 * a
"f/f2" forall a. f . f $ a = 4 * a
"f/f3" forall a. f $ f $ a = 4 * a
#-}
然而,當我們這些串在一起,或使用一些其他形式的組成規則不火。
test4 = f . f . f $ 1
test5 = f $ f $ f $ 1
test6 = f $ 1
這是爲什麼?我是否必須爲每個可能的實現編寫重寫規則?
我其實不知道,但我猜這是因爲重寫規則不適用於你導入的函數。 ''''和'.'只是從Prelude導入的函數。 – 2012-02-12 23:40:36