Да, эти :
{-#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))
Да, я знаю, что это шутка ( HHOS ). Я ищу реальный пример простого значения хака и, наконец, что не менее важно, чтобы добавить его в вики, говоря: «Это идиоматический способ выразить XYZ». Я буду положить Баунти на это , если вы не в состоянии придумать решением. Если вы полностью потерялись в том, о чем они, Эдвард опубликовал краткое объяснение на Reddit.
Правомочные Ответы должны:
сделать что-то хотя бы удаленно и теоретически полезно для вычислений. То есть ответы, которые сводятся к тому
id, отсутствуют.используйте все возможности схемы, не передавая id, или const, или эквивалентный.
не одинаково хорошо быть выраженным простой, ванильной складкой или чем-то подобным, так что не просто реализуйте
productизвилистым способом.
Бонусные баллы будут начислены:
Хорошо известная проблема или алгоритм
решается, соответственно выражается, необычным образом, что выигрывает
ясность и / или производительность
и / или ценность хака
и / или lulz, примерно в таком порядке, а также
высокопоставленные ответы (уй демократия)
Пожалуйста, обратите внимание на ответ Эдварда ниже. Какую реализацию ZHPM вы используете - ваш выбор.
aможет быть что угодно, поэтому не стесняйтесь построить значение IO, которое стратегически запускает ракеты на основе оценки ваших входных данных.
IOв свой стек, мы могли бы использовать знаменитуюlaunchMisslesфункцию SimonPJ . Но я предполагаю, что весь смысл этой сверхчистой абстрактной чепухи состоит в том, чтобы избежать возможности подобных вещей.