{-|
This module defines intrinsically well-staged rose trees,
and re-exports the StagedList module with StagedList renamed to StagedForest.
The module is parameterized by a ℕ-indexed type Item that represents the types of items stored in the tree.
-}
{-# OPTIONS --safe #-}
open import Data.Nat using (ℕ)
module Data.StagedTree (Item : ℕ → Set) where
open import Data.StagedList using (StagedList)
{- |
Rose tree data structure built from staged lists.
A StagedTree n contans an item at level n, and a subtree whose items are at level n or higher.
Fields:
children: A staged list of subtrees, each at stage ≥ n
item: An item at stage n
-}
infix 4 _⊢_
record StagedTree (n : ℕ) : Set where
inductive
constructor _⊢_
field
children : StagedList StagedTree n
item : Item n
-- | A StagedForest n is a list of StagedTrees at level ≥ n.
open import Data.StagedList StagedTree renaming (StagedList to StagedForest) public