合子组织形态学前态的现实应用

是的,这些:

{-#LANGUAGE TypeOperators, RankNTypes #-}
import Control.Morphism.Zygo
import Control.Morphism.Prepro
import Control.Morphism.Histo
import Control.Functor.Algebra
import Control.Functor.Extras
import Control.Functor.Fix
import Control.Comonad.Cofree


zygohistomorphic_prepromorphism
:: Functor f
=> Algebra f b
-> GAlgebra f (ZygoT (Cofree f) b) a
-> (f :~> f)
-> FixF f
-> a
zygohistomorphic_prepromorphism f
= g_prepro (distZygoT (liftAlgebra f) (distHisto id))

是的,我知道他们是一个(居屋计划)笑话。我正在寻找一个真实的例子,简单的黑客价值和最后,但不是最不重要的,添加到维基说: “这是表达 XYZ 的惯用方法”。如果你想不出解决办法,我 威尔悬赏这个。如果你完全不知道它们是关于什么的,爱德华在 Reddit 上发布了一个 简短的解释

合资格答案必须:

  1. 至少做一些远程和理论上有用的计算。也就是说,答案减少到 id

  2. 使用方案的所有特性,不传入 id、 const 或等价物。

  3. 不能用简单的、普通的折叠或类似的方式同样好地表达,所以不要仅仅以一种迂回的方式实现 product

以下人士可获加分:

  • 著名的问题或算法

  • 解决,分别表示,以一种不寻常的方式,收益

  • 清晰度及/或表现

  • 和/或黑客价值

  • 和/或 Lulz,大致按照这个顺序,以及

  • 高级答案(民主万岁)

请注意下面的 爱德华的回答。您使用的 ZHPM 实现是您的选择。

15130 次浏览

注意,这些文件的签名已经更改,因为它不够通用,我将其包含在 递归方案包中(开玩笑的)。

zygoHistoPrepro
:: (Unfoldable t, Foldable t)
=> (Base t b -> b)
-> (forall c. Base t c -> Base t c)
-> (Base t (EnvT b (Stream (Base t)) a) -> a)
-> t
-> a

实现也被简化了。

zygoHistoPrepro f = gprepro (distZygoT f distHisto)

从新的实现来看,通过放松对 (Base t)-Branching流的限制,通过使用 distGHisto来实现 广义的合子组织形态学前态性应该是显而易见的。

Sharon Curtis 和 Shin-Cheng Mu 有一颗功能性珍珠,它利用颧骨的形态来寻找最大密度的片段(最大片段和的推广)。一旦你习惯了左右对称,似乎很适合滑动窗口的问题。

Http://www.iis.sinica.edu.tw/~scm/2010/functional-pearl-maximally-dense-segments/

我会提名作者为额外的学分,因为他们已经避免使用定点 Mu 函数。