Ideally, rose trees are non-empty multi-tailed lists. That's how the Data.Tree.Rose class specifies it.
To complete the spec, we need the following (much like a set):
- Operators
- Query (no sense for lookup, these are unkeyed (sub-)functors. For that, see tries)
- Construction
- The
@-> overloaded constructor will take care of the Cons case, but for some (like Data.Tree.Set), we'll need delete, etc. (insert is a malformed idea :s)
- Set operations (union, intersection, difference)
- Filter
- Mapping
plus proper Fold, Traverse, and anything else we can tack on each implementation.
Ideally, rose trees are non-empty multi-tailed lists. That's how the
Data.Tree.Roseclass specifies it.To complete the spec, we need the following (much like a set):
@->overloaded constructor will take care of theConscase, but for some (likeData.Tree.Set), we'll needdelete, etc. (insertis a malformed idea :s)plus proper Fold, Traverse, and anything else we can tack on each implementation.