Sim, estes :
{-#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))
Sim, eu sei que eles são uma piada ( HHOS ). Estou procurando um exemplo do mundo real para um valor simples de hack e, por último, mas não menos importante, para adicioná-lo ao wiki dizendo "Esta é a maneira idiomática de expressar XYZ". I vai colocar uma recompensa por isso você deve deixar de chegar a uma solução. Se você está completamente perdido, Edward postou uma breve explicação no reddit.
As respostas elegíveis devem:
faça algo pelo menos remotamente e teoricamente computacionalmente útil. Ou seja, respostas que reduzem a
id
estão fora.use todos os recursos do esquema, sem passagem de id, ou const ou equivalente.
não seja igualmente bem expressável por uma simples dobra de baunilha ou algo assim; portanto, não apenas implemente de
product
maneira sinuosa.
Pontos de bônus serão dados a:
Problema ou algoritmo conhecido
resolvidos, respectivamente expressos, de uma maneira incomum que ganha
clareza e / ou desempenho
e / ou valor de hack
e / ou lulz, aproximadamente nessa ordem, bem como
respostas de alto escalão (democracia yay)
Observe também a resposta de Edward abaixo. Qual implementação de ZHPM você usa é sua escolha.
fonte
IO
na sua pilha, poderíamos ter usado a famosalaunchMissles
função do SimonPJ . Mas acho que o objetivo de toda essa bobagem abstrata super pura é evitar a possibilidade de tais coisas.a
pode ser qualquer coisa, portanto, sinta-se à vontade para construir um valor de IO que estrategicamente atire mísseis com base em uma avaliação dos dados de entrada.Respostas:
Sharon Curtis e Shin-Cheng Mu têm uma Pérola Funcional usando zigomorfismos para encontrar segmentos maximamente densos (uma generalização da soma máxima de segmentos). Aparentemente, os zigomorfismos são adequados para problemas de janelas deslizantes quando você está acostumado a eles.
http://www.iis.sinica.edu.tw/~scm/2010/functional-pearl-maximally-dense-segments/
Eu indicaria os autores para crédito extra, pois eles evitaram o uso do functor Mu de ponto fixo.
fonte
foldr
pode ver a lista que já foi construída), mas o prepro não é imediatamente aparente para mim. Você poderia elaborar? (e, se possível, dar curto código + doce que pode alinhavar até a página wiki?)Observe que a assinatura deles mudou, porque era insuficientemente geral e eu a incluí (como uma piada) no meu pacote de esquemas de recursão .
A implementação também foi simplificada.
E a partir da nova implementação, deve ser óbvio como implementar um pré-promorfismo zigo-histomórfico generalizado , relaxando a restrição de que você tem um
(Base t)-Branching
fluxo, usando-odistGHisto
.fonte