【发布时间】:2012-03-04 10:47:03
【问题描述】:
为什么 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 导入的函数。
标签: haskell rules ghc function-composition