【发布时间】:2015-03-02 09:50:17
【问题描述】:
计算Data.Tree 的深度需要哪些最少(最一般的)信息? Data.Foldable 的实例是否足够?
我最初尝试 fold 和 Tree 并在试图找到类似于 Max 的正确 Monoid 时遇到了困难。有些东西告诉我,由于Monoid(计算深度)需要是关联的,它可能不能用于表达任何需要了解结构的折叠(如1 + maxChildrenDepth),但我不确定.
我想知道什么样的思维过程可以让我对这种情况做出正确的抽象。
【问题讨论】:
-
定义“最少信息”的含义。对于任何“有深度的结构”,我认为树本身非常简单。
-
我非常喜欢这个问题。也许一个相关的问题是:有没有像
Traversable这样使用 both 折叠Functor的Alternative和Applicative结构的东西? -
(我在想什么的更多细节:用明显的
Functor实例定义data Depth a = Depth Nat并不难。Applicative半群可能是(+,0)和Alternative一个(max,0)。) -
不幸的是,
Data.Foldable在这里不会为您做任何事情,除了提供(可能是无限的)上限。它太“一维”了。您可以使用Data.Foldable实例为Tree执行的任何操作,您只需使用toList。 -
计算树的深度所需的最少信息是……树的深度。我知道这不是那么有用,但它显然是正确的。