Да, эти :
{-#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 . Но я предполагаю, что весь смысл этой сверхчистой абстрактной чепухи состоит в том, чтобы избежать возможности подобных вещей.