definition module StdRoseTree

import StdClass

/**	This module defines rose trees.
*/
::	RoseTree a	=	Node a [RoseTree a]
::	Children a	:== a -> [a]
::	PruneDepth	:== Int

iteratetree		:: !(Children a) a ->  RoseTree a

root			:: !(RoseTree a)   -> a
children		:: !(RoseTree a)   -> [RoseTree a]
depth			:: !(RoseTree a)   -> Int

maptree			:: (a -> b)    !(RoseTree a) -> RoseTree b
prunetree		:: !PruneDepth !(RoseTree a) -> RoseTree a
bonsai			::             !(RoseTree a) -> RoseTree a | Eq a
paths			::             !(RoseTree a) -> [[a]]