"等效功能"搜索(功能使用扣除)

时间:2015-12-01 09:05:28

标签: haskell

编码时,我们使用自己对可用机器的知识编写代码。这种知识(显然)是偏袒的。如果存在一些与我们的代码等效的函数,那么很棒的工具(例如pointfree)会对我们说。这项工作通常看起来是NP完全的(子图同构),但在某些情况下可能是实用的。

我在某些方面思考:

  1. 使用Hoogle搜索代码签名(也许是子搜索)。
  2. 使用一些校对工具测试等效性或根据经验使用Test.QuickCheck
  3. 示例:

    > :t getSum . foldMap Sum
    getSum . foldMap Sum :: (Num c, Foldable t) => t c -> c
    > :t sum
    sum :: (Num a, Foldable t) => t a -> a
    >
    

    然后,当写入前者时,会自动建议后者。使用pointfree样式:

    $ search-equivalence 'getSum . foldMap Sum'
    sum
    

    存在一些工具吗?

1 个答案:

答案 0 :(得分:1)

Hlint,它确实运作良好。

plugin有一个atom。 我已经使用了一段时间了,它确实有帮助,你甚至可以从中学习它。