树状结构的递归方案

时间:2020-06-16 18:53:36

标签: haskell functional-programming recursion-schemes catamorphism

我正在尝试建立以下递归方案:

{-# 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)中的库函数,以最通用,最简单的方式编写此recursion-schemes?这个方案有一个众所周知的名字吗?

0 个答案:

没有答案