范畴论和抽象代数处理函数可以与其他函数组合的方式。复杂度理论涉及函数的计算难度。我很奇怪我没有看到任何人将这些研究领域相结合,因为它们看起来像是天生的对。有人做过吗?
作为一个激励性的例子,让我们看一下monoid。众所周知,如果一个操作是一个monoid,那么我们可以并行化该操作。
例如在Haskell中,我们可以简单地将加法定义为整数,如下所示:
instance Monoid Int where
mempty = 0
mappend = (+)
现在,如果我们要计算0到999的总和,可以依次执行以下操作:
foldl1' (+) [0..999]
或者我们可以并行执行
mconcat [0..999] -- for simplicity of the code, I'm ignoring that this doesn't *actually* run in parallel
但是并行化此类半体唯一有意义的原因是mappend在恒定时间内运行。如果不是这种情况怎么办?例如,列表是等分体,其中mappend的运行时间不是恒定的(或空格!)。我猜这就是为什么Haskell中没有默认的并行mconcat函数。最佳的实现取决于类半体动物的复杂性。
似乎应该有一种方便的方法来描述这两个类半体动物之间的差异。然后,我们应该能够使用这些差异来注释我们的代码,并让程序根据Monoid的复杂性自动选择最佳算法来使用。