首页 文章

颧弓形态前同态的真实应用

提问于
浏览
154

是的,these ones

{-#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)的笑话 . 我正在寻找一个简单的黑客 Value 的真实世界的例子,最后,但并非最不重要的是,将它添加到维基说"This is the idiomatic way to express XYZ" . 如果你没有提出解决方案,我会对此表示赏心悦目 . 如果你重新开始,爱德华在reddit上发布了short explanation .

符合条件的答案必须:

  • 至少做一些远程的事情,理论上计算上有用 . 也就是说,减少到 id 的答案已经结束 .

  • 使用方案的所有功能,不传入id,const或等效 .

  • 不能用简单的,香草折叠等表达,所以不要仅仅以蜿蜒的方式实现 product .

奖励积分将给予:

  • 众所周知的问题或算法

  • 以一种不寻常的方式解决,分别表达了

  • 清晰度和/或性能

  • 和/或黑客 Value

  • 和/或lulz,大致按此顺序,以及

  • 高级答案(耶和华民主)

另请注意下面的Edward's answer . 您使用的ZHPM实施是您的选择 .

2 回答

  • 38

    Sharon Curtis和Shin-Cheng Mu使用zygomorphisms来寻找最大密集区段(最大区段总和的概括) . 一旦你习惯了它们,Zygomorphisms似乎非常适合滑动窗口问题 .

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

    由于他们避免使用定点Mu函子,我会提名作者以获得额外的功劳 .

  • 51

    注意,这些的签名已经改变,因为它不够通用,我把它(作为一个笑话)包含在我的recursion-schemes包中 .

    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 prepromorphism .

相关问题