Si, estos :
{-#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))
Sí, sé que son una broma ( HHOS ). Estoy buscando un ejemplo del mundo real para el valor de pirateo simple y, por último, pero no menos importante, agregarlo a la wiki diciendo "Esta es la forma idiomática de expresar XYZ". Me voy a poner una recompensa en este caso de que no llegar a una solución. Si estás completamente perdido en lo que se trata, Edward publicó una breve explicación en reddit.
Las respuestas elegibles deben:
hacer algo al menos remota y teóricamente computacionalmente útil. Es decir, las respuestas que se reducen a
id
están fuera.use todas las características del esquema, sin pasar de id, o const, o equivalente.
no se puede expresar de la misma manera con un simple pliegue de vainilla o algo así, así que no lo implemente simplemente de
product
manera serpenteante.
Se otorgarán puntos de bonificación a:
Problema o algoritmo bien conocido
resuelto, respectivamente expresado, de una manera inusual que gana
claridad y / o rendimiento
y / o piratear el valor
y / o lulz, más o menos en ese orden, así como
respuestas de alto rango (yay democracia)
Tenga en cuenta también la respuesta de Edward a continuación. La implementación de ZHPM que use es su elección.
fuente
IO
en su pila, podríamos haber utilizado la famosalaunchMissles
función de SimonPJ . Pero supongo que el punto de todas esas tonterías abstractas súper puras es evitar la posibilidad de tales cosas.a
puede ser cualquier cosa, así que siéntase libre de construir un valor IO que lance estratégicamente misiles en función de una evaluación de sus datos de entrada.Respuestas:
Sharon Curtis y Shin-Cheng Mu tienen una Perla Funcional que usa cigomorfismos para encontrar segmentos de máxima densidad (una generalización de sumas de segmentos máximos). Aparentemente, los cigomorfismos son una buena opción para los problemas de ventanas deslizantes una vez que esté acostumbrado a ellos.
http://www.iis.sinica.edu.tw/~scm/2010/functional-pearl-maximally-dense-segments/
Nominaría a los autores para obtener crédito adicional ya que han evitado el uso del functor Mu de punto fijo.
fuente
foldr
puede ver la lista que ya construyó), pero el prepro no es inmediatamente aparente para mí. ¿Podrías dar más detalles? (y, si es posible, dar un código corto + dulce que podamos agregar a la página wiki?)Tenga en cuenta que la firma de estos ha cambiado, porque era insuficientemente general, y lo incluí (como una broma) en mi paquete de esquemas de recursión .
La implementación también se simplificó.
Y a partir de la nueva implementación, debería ser obvio cómo implementar un prepromorfismo zygohistomorfo generalizado , relajando la restricción de que tiene una
(Base t)-Branching
secuencia, mediante el uso dedistGHisto
.fuente