世界应用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 f b
  -> GAlgebra f (ZygoT (Cofree f) b) a 
  -> (f :~> f) 
  -> FixF f 
  -> a
zygohistomorphic_prepromorphism f 
  = g_prepro (distZygoT (liftAlgebra f) (distHisto id))

是的,我知道他们是一个(HHOS)笑话。 我正在寻找一个简单的黑客价值的真实世界的例子,最后,但并非最不重要的是,将它添加到维基说:“这是表达XYZ的惯用方式”。 如果您不能提出解决方案,我会对此给予奖励。 如果你完全失去了自己的想法,爱德华就reddit发表了一个简短的解释。

符合条件的答案必须:

  • 至少在远程和理论上计算上有用。 也就是说,减少到id答案已经结束。

  • 使用该方案的所有功能,不传入id,const或等价物。

  • 不仅可以通过简单的香草折叠等来表达,所以不要仅仅以曲折的方式实施product

  • 奖励积分将给予:

  • 众所周知的问题或算法

  • 分别以一种不寻常的方式得到解决

  • 清晰度和/或性能

  • 和/或黑客价值

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

  • 高级答案(耶民主)

  • 请注意爱德华的答案。 您使用什么ZHPM实施是您的选择。


    Sharon Curtis和Shin-Cheng Mu有一个使用双色配对的功能性明珠来寻找最密集的分段(最大分段总和的推广)。 一旦你习惯了滑动窗口问题,它们看起来很适合滑动窗口问题。

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

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


    请注意,这些签名已经改变了,因为它不够一般,我在递归方案包中包含它(作为笑话)。

    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)
    

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

    链接地址: http://www.djcxy.com/p/42941.html

    上一篇: world applications of zygohistomorphic prepromorphisms

    下一篇: What is the Haskell response to Node.js?