zygohistomorphic prepromorphisms的真实世界的应用

是的, 这些 :

{-#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 fb -> GAlgebra f (ZygoT (Cofree f) b) a -> (f :~> f) -> FixF f -> a zygohistomorphic_prepromorphism f = g_prepro (distZygoT (liftAlgebra f) (distHisto id)) 

是的,我知道他们是( HHOS )的笑话。 我正在寻找一个简单的黑客价值的真实世界的例子,最后,但并非最不重要的是,将其添加到维基说:“这是expressionXYZ的惯用方式”。 如果你不能提出一个解决scheme,我会把这个奖金。 如果你完全不知所措,Edward就在reddit上发表了一个简短的解释 。

符合条件的答案必须:

  1. 至less从远程和理论上计算有用。 也就是说,减less到id答案已经出来了。

  2. 使用该scheme的所有function,不传入id,const或等价的。

  3. 用简单的,香草的折叠或类似的东西来expression也不是很好,所以不要单纯地用曲折的方式来实现product

奖励积分将给予:

  • 众所周知的问题或algorithm

  • 分别以不寻常的方式解决了这个问题

  • 清晰度和/或性能

  • 和/或黑客价值

  • 和/或lulz,大致是这样的顺序,以及

  • 高级答案(耶民主)

下面还请注意Edward的答案 。 您使用什么ZHPM实施是您的select。

莎朗·柯蒂斯(Sharon Curtis)和信成(Mu Shin-Cheng Mu)有一个function性明珠(Functional Pearl),它使用双重配偶来寻找最密集的部分(最大部分和的泛化)。 一旦习惯了它们,对偶看起来很适合滑动窗口的问题。

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

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

请注意,这些签名已经改变了,因为它不够一般,我把它(作为一个笑话)包括在我的recursionscheme包中。

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

实施也被简化了。

 zygoHistoPrepro f = gprepro (distZygoT f distHisto) 

从新的实现中,应该明白如何通过使用distGHisto来放松约束(Base t)-Branching支stream,从而实现一个广义的 zygohistomorphic预制distGHisto