Oui, ceux-ci :
{-#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))
Oui, je sais que c'est une blague ( HHOS ). Je suis à la recherche d'un exemple concret de valeur de hack simple et enfin, mais non des moindres, de l'ajouter au wiki en disant "C'est la manière idiomatique d'exprimer XYZ". Je vais mettre une prime sur ce si vous négligez de trouver une solution. Si vous êtes complètement perdu sur ce dont ils parlent, Edward a publié une courte explication sur reddit.
Les réponses éligibles doivent:
faire quelque chose au moins à distance et théoriquement utile en termes de calcul. Autrement dit, les réponses qui se réduisent à
id
sont sorties.utiliser toutes les fonctionnalités du schéma, pas de passage de id, ou const, ou équivalent.
pas tout aussi bien exprimable par un simple pli vanille ou autre, alors ne vous contentez pas de mettre
product
en œuvre de manière sinueuse.
Des points bonus seront attribués à:
Problème ou algorithme bien connu
résolus, respectivement exprimés, d'une manière inhabituelle qui gagne
clarté et / ou performance
et / ou valeur de piratage
et / ou lulz, dans à peu près cet ordre, ainsi que
réponses de haut rang (yay démocratie)
Veuillez également noter la réponse d'Edward ci-dessous. Quelle implémentation ZHPM vous utilisez est votre choix.
la source
IO
dans votre pile, nous aurions pu utiliser la célèbrelaunchMissles
fonction de SimonPJ . Mais je suppose que le but de toutes ces absurdités abstraites super-pures est d'éviter la possibilité de telles choses.a
peut être n'importe quoi, alors n'hésitez pas à construire une valeur IO qui lance stratégiquement des missiles en fonction d'une évaluation de vos données d'entrée.Réponses:
Sharon Curtis et Shin-Cheng Mu ont une perle fonctionnelle utilisant des zygomorphismes pour trouver des segments denses au maximum (une généralisation des sommes maximales de segments). Les zygomorphismes sont apparemment un bon choix pour les problèmes de fenêtres coulissantes une fois que vous y êtes habitué.
http://www.iis.sinica.edu.tw/~scm/2010/functional-pearl-maximally-dense-segments/
Je nommerais les auteurs pour un crédit supplémentaire car ils ont évité l'utilisation du foncteur Mu à virgule fixe.
la source
foldr
peut regarder la liste déjà construite), mais le prépro ne m'est pas immédiatement apparent. Pourriez-vous élaborer? (et, si possible, donnez un code court + doux que nous pouvons clouer sur la page wiki?)Notez que la signature de ceux-ci a changé, car elle n'était pas suffisamment générale, et je l'ai incluse (comme une blague) dans mon paquet récursivité-schémas .
La mise en œuvre a également été simplifiée.
Et à partir de la nouvelle implémentation, il devrait être évident comment implémenter un prépromorphisme zygohistomorphique généralisé , en relâchant la contrainte que vous avez un
(Base t)-Branching
flux, en utilisant à ladistGHisto
place.la source