Sì, questi :
{-#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ì, so che sono uno scherzo ( HHOS ). Sto cercando un esempio del mondo reale per un semplice valore di hacking e, ultimo ma non meno importante, aggiungerlo al wiki dicendo "Questo è il modo idiomatico di esprimere XYZ". Io sarò messo una taglia su questo si dovrebbe riuscire a trovare una soluzione. Se ti sei completamente perso su ciò di cui parlano, Edward ha pubblicato una breve spiegazione su reddit.
Le risposte idonee devono:
fare qualcosa almeno in remoto e teoricamente utile dal punto di vista computazionale. Cioè, le risposte che riducono a
id
sono fuori.usa tutte le funzionalità dello schema, nessun passaggio di id, const o equivalente.
non essere ugualmente bene esprimibile con una semplice piega alla vaniglia o simile, quindi non limitarti a implementarlo
product
in modo tortuoso.
I punti bonus saranno assegnati a:
Problema o algoritmo noto
risolto, rispettivamente espresso, in un modo insolito che guadagna
chiarezza e / o prestazione
e / o valore di hacking
e / o lulz, all'incirca in quell'ordine, nonché
risposte di alto livello (yay democrazia)
Nota anche la risposta di Edward qui sotto. Quale implementazione di ZHPM usi è la tua scelta.
a
può essere qualsiasi cosa, quindi sentiti libero di costruire un valore IO che lancia strategicamente missili sulla base di una valutazione dei tuoi dati di input.
IO
nel tuo stack, avremmo potuto usare la famosalaunchMissles
funzione di SimonPJ . Ma suppongo che il punto centrale di tutte queste assurdità astratte purissime sia evitare la possibilità di tali cose.