编码时,我们使用自己对可用机器的知识编写代码。这种知识(显然)是偏袒的。如果存在一些与我们的代码等效的函数,那么很棒的工具(例如pointfree
)会对我们说。这项工作通常看起来是NP完全的(子图同构),但在某些情况下可能是实用的。
我在某些方面思考:
Test.QuickCheck
。示例:
> :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
存在一些工具吗?