変更可能な状態を持てないので外部イテレータではなく内部イテレータで定義されています。これを二分木に実装しましょう。「まず左、値、そして右」の順(通りがけ順)に走査していけばよさそうです。素直にこう実装できます。rこれを用いてリストとの相互変換を実装してみましょう。煩雑だった値の構築が少し楽になります。リストのコンストラクタです。いう関数が定義できます。以下のように定義されているのでした。構成されているとも読めます。この構成子を別の定数と3引数関数で置き換えてあげる操作です。ないので自分で定義します。再帰的にやっているのが見て取れると思います。使っていくつか関数を定義してみましょう。木のサイズ(保持している要素数)はこう定義できます。1)これは一番深い方を求めています。浅い方を求めるのも考えられるのでそれも実装してみましょう。BTreeやリストに限らず色々なデータ型にも定義できますが、それをインターフェースで一般化するのはかなり難易度が上がります。列挙子に応じて引数の数や型が変わるので共通のインターフェースが定められないのです。やるとしたらデータ型の定義ごと管理下に置くような仕組みが必要になるでしょう。scheme"という名前で色々整備されているようです。catamorphismと呼ばれます。schemeは日本語でもいくつか解説があるようですが以下のブログを紹介しておきます。二分木は集合のように扱えるので合併、交叉、差分などの操作も欲しくなりますよね。使うと簡単に実装できます。良くない点があるのですが気にしないことにしましょう。これらの雑多な操作のテストも書いておきましょう。testUnionパッケージを整えるbtree.ipkgには最低限の内容しか書いてませんでした。"https://gitlab.com/blackenedgold/idris-btree/issues"ドキュメントを生成してみましょう。開くとドキュメントを確認できます。書いて適当にコミットしましょう。CIで以下のようにテスト/ドキュメント生成ができます。master生成されたドキュメントはこちら。Actionsで同様にはできると思います。Pagesとは違って一苦労必要そうですが。まとめこのチュートリアルでは二分木のライブラリを作りつつIdrisでのデータ型の定義、インターフェース、テスト、パッケージなどについて学びました。