Так, це :
{-#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
лукавий спосіб.
Бонусні бали будуть надані:
Загальновідома проблема або алгоритм
вирішується, відповідно виражається, незвичним способом, який отримує
чіткість та / або ефективність
та / або значення злому
та / або люлз, приблизно в такому порядку, як і
відповіді високого рангу (так, демократія)
Також зверніть увагу на відповідь Едварда нижче. Яку реалізацію ZHPM ви використовуєте - це ваш вибір.
a
може бути що завгодно, тому сміливо будуйте значення IO, яке стратегічно запускає ракети на основі оцінки ваших вхідних даних.
IO
у свій стек, ми могли б використати знаменитуlaunchMissles
функцію SimonPJ . Але я здогадуюсь, вся суть усієї надчистої абстрактної дурниці полягає у тому, щоб уникнути можливості подібних речей.