Да, эти :
{-#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 вы используете - ваш выбор.
IO
в свой стек, мы могли бы использовать знаменитуюlaunchMissles
функцию SimonPJ . Но я предполагаю, что весь смысл этой сверхчистой абстрактной чепухи состоит в том, чтобы избежать возможности подобных вещей.a
может быть что угодно, поэтому не стесняйтесь построить значение IO, которое стратегически запускает ракеты на основе оценки ваших входных данных.Ответы:
Шарон Кертис и Шин-Ченг Му имеют Функциональную Жемчужину, использующую зигоморфизмы для нахождения максимально плотных сегментов (обобщение максимальных сумм сегментов). Зигоморфизмы, по-видимому, хорошо подходят для проблем с раздвижными окнами, когда вы к ним привыкли.
http://www.iis.sinica.edu.tw/~scm/2010/functional-pearl-maximally-dense-segments/
Я бы назначил авторов за дополнительную оценку, поскольку они избегали использования функтора Му с фиксированной точкой.
источник
foldr
может посмотреть на список, который он уже создал), но препро не сразу для меня очевиден. Не могли бы вы уточнить? (и, если возможно, дайте короткий + сладкий код, который мы можем прикрепить на вики-странице?)Обратите внимание, что их подпись изменилась, потому что она была недостаточно общей, и я включил ее (в шутку) в свой пакет схем рекурсии .
Реализация также была упрощена.
И из новой реализации должно быть очевидно, как реализовать обобщенный зигогистоморфный препроморфизм, ослабив ограничение на
(Base t)-Branching
поток, используяdistGHisto
вместо этого.источник