haskell - category theory for programmers
Aplicaciones del mundo real de prepromorfismos zygohistomorphic (2)
Sí, 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, para agregarlo al wiki diciendo "Esta es la forma idiomática de expresar XYZ". Pondré una recompensa por esto si no logras encontrar una solución. Si estás completamente perdido en lo que tratan, Edward publicó una breve explicación sobre reddit.
Las respuestas elegibles deben:
hacer algo al menos de manera remota y teóricamente útil desde el punto de vista computacional. Es decir, las respuestas que 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 por un doblez simple o similar, así que no implemente el
product
simplemente de forma serpenteante.
Los puntos de bonificación se otorgarán a:
Problema o algoritmo bien conocido
resuelto, respectivamente expresado, de una manera inusual que gana
claridad y / o rendimiento
y / o hackear el valor
y / o lulz, en aproximadamente ese orden, así como
respuestas de alto rango (yay democracia)
Por favor, también tenga en cuenta la respuesta de Edward a continuación. Qué implementación de ZHPM usa es su elección.
Sharon Curtis y Shin-Cheng Mu tienen una Perla funcional que utiliza zigomorfismos para encontrar segmentos de máxima densidad (una generalización de las sumas de los segmentos máximos). Los cigomorfismos son aparentemente una buena opción para los problemas de ventana deslizante 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 evitaron el uso del funcionador Mu de punto fijo.
Tenga en cuenta que la firma de estos ha cambiado, porque no era lo suficientemente general, y lo incluí (como una broma) en mi paquete de 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
La implementación también se simplificó.
zygoHistoPrepro f = gprepro (distZygoT f distHisto)
Y a partir de la nueva implementación, debería ser obvio cómo implementar un prepromorfismo zygohistomorphic generalizado , relajando la restricción de que usted tiene un flujo (Base t)-Branching
, mediante el uso de distGHisto
en distGHisto
lugar.