触发类方法的规则

时间:2017-02-13 08:25:26

标签: haskell optimization ghc

如果这是一个有点模糊的问题我很抱歉,我只是想知道我正朝着正确的方向前进。 (GHC 8.0.2)

我有一个“类似列表”的数据类型,我们称之为T a。例如,它是FoldableFunctorMonoid的实例。

我想制定一些规则,例如(粗略地说,这里没有使用确切的语法):

  1. 您可以折叠两个列表,只需折叠第一个然后折叠第二个(不需要实际附加列表):

    foldl'f z(x ++ y) - > foldl'f(foldl'f z x)y

  2. 如果您正在折叠已映射的列表,您只需将地图功能拖动到折叠中,即可删除地图:

    foldl'f z(fmap x) - >令h x y = f x(g y)in foldl h z x

  3. 如果要映射附加列表,只需映射各个列表,然后附加它们:

    fmap(x ++ y) - > fmap x ++ fmap y

  4. 我该怎么做?我目前所做的是让我的实例方法调用顶级方法,如fmap',它完成所有工作,然后我将规则应用于这些方法。但是-ddump-rule-rewrites似乎没有显示我的规则触发,但有很多Class op *规则触发,例如Class op fmapClass op foldl'

    我应该是:

    一个。做我正在做的事情? 湾直接在类方法上应用我的规则? C。标准类规则应该涵盖我的数据类型的情况,没有必要做任何事情?要么 d。上述内容的某种组合,涉及INLINENOINLINE pragma在适当状态下的混合(请详细说明)。

    我怀疑答案是(d),我只是想要一些指导来开始。

0 个答案:

没有答案