Ja, diese :
{-#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))
Ja, ich weiß, dass sie ein ( HHOS ) Witz sind. Ich suche ein reales Beispiel für einen einfachen Hack-Wert und nicht zuletzt, um es dem Wiki hinzuzufügen und zu sagen: "Dies ist die idiomatische Art, XYZ auszudrücken." Ich werde ein Kopfgeld dafür geben, falls Sie keine Lösung finden. Wenn Sie völlig verloren sind, worum es geht, hat Edward eine kurze Erklärung zu reddit veröffentlicht.
Geeignete Antworten müssen:
Machen Sie etwas zumindest aus der Ferne und theoretisch rechnerisch nützlich. Das heißt, Antworten, die sich auf reduzieren,
id
sind aus.Verwenden Sie alle Funktionen des Schemas, ohne dass id, const oder ein gleichwertiges Element übergeben werden.
nicht gleich gut durch eine einfache Vanillefalte oder dergleichen auszudrücken, also nicht nur
product
mäanderförmig umsetzen .
Bonuspunkte werden vergeben an:
Bekanntes Problem oder Algorithmus
auf ungewöhnliche Weise gelöst bzw. ausgedrückt, die gewinnt
Klarheit und / oder Leistung
und / oder Hackwert
und / oder lulz, in ungefähr dieser Reihenfolge, sowie
hochrangige Antworten (yay Demokratie)
Bitte beachte auch Edwards Antwort unten. Welche ZHPM-Implementierung Sie verwenden, ist Ihre Wahl.
a
kann alles sein, also zögern Sie nicht, einen E / A-Wert zu konstruieren, der Raketen strategisch abfeuert, basierend auf einer Bewertung Ihrer Eingabedaten.
IO
in Ihren Stapel aufgenommen hätten, hätten wir die berühmtelaunchMissles
Funktion von SimonPJ verwenden können. Aber ich denke, der Sinn all dieses superreinen abstrakten Unsinns ist es, die Möglichkeit solcher Dinge zu vermeiden.