Схема рекурсии для древовидной структуры - PullRequest
3 голосов
/ 16 июня 2020

Я пытаюсь построить следующую схему рекурсии:

{-# LANGUAGE DeriveFunctor #-}
import Data.Functor.Foldable
import Control.Comonad
import Control.Comonad.Cofree

data Term a = Str String | Array [a] deriving (Show, Functor)
type Tree = Fix Term
type Annotated = Cofree Term String
-- i.e. Annotated = String × Term Annotated

something :: (Term String -> String) -> Tree -> Annotated
something algebra = cata algebra' where
    algebra' t = algebra (extract <$> t) :< t

Как я могу составить этот something наиболее общим c и минималистичным c способом, используя стандартные функции из современных библиотеки схем рекурсии, такие как recursion-schemes? Есть ли у этой схемы общеизвестное название?

...