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上发表了一个简短的解释 。
符合条件的答案必须:
-
至less从远程和理论上计算有用。 也就是说,减less到
id
答案已经出来了。 -
使用该scheme的所有function,不传入id,const或等价的。
-
用简单的,香草的折叠或类似的东西来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
。