はじめに Recursion schemes(再帰スキーム)とは,再帰的なデータ構造に対する汎用コンビネータの総称のことである.ところで, recursion schemes から導出される再帰構造を捉えた Functor (代数) による再帰データの表現は,コンパイラやインタプリタでASTを扱う際便利な場合が多い.しかし,この表現は相互再帰に弱いという欠点がある.ここでは,高階代数で同様のことを考えることにより,この欠点を克服する手法を紹介する. なお,以下のものを想定している. GHCのバージョン: 8.6.3 前提とするGHC拡張 BlockArguments DataKinds DeriveFunctor FlexibleInstances FlexibleContexts FunctionalDependencies GADTs LambdaCase MultiParamType
![ASTのための高階代数を元にした recursion schemes - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/cbc1f0f7d57c0fbd7dc87d81bc07542c36a83eff/height=288;version=1;width=512/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fqiita-fb-2887e7b4aad86fd8c25cea84846f2236.png)