data Book  = <book>(Title . Author*. Section*);
data Title = <title>(String);
data Author = <author>(String);
data Section = <section> {id:String, difficulty:String}(Title.T*);
--             | <section> {id:String} (Title.T*)
--             | <section> {id:String, difficulty:String}(Title.T*) 
--	     | <section> {difficulty:String}(Title.T*)
--	     | <section> (Title. T*);

data T = <p>(String) 
       | <figure> { width: String, height: String } (Title.Image) 
       | Section;
data Image = <image> { source: String }; 

toc(<book>(x :: Title . y :: Author* . z :: Section*)) = <toc>(h(z));
h($) = $;
h(<section> { id: i, difficulty: d }( t :: Title. v :: T* ) . r) =
 <section> { id: i, difficulty: d } (t . g(v)) . h(r);
g($) = $;
g(<p>(x::String) . r) = g(r);
g(<figure> { width: w, height: h }(x).r) = g(r);
g(x :: Section . r) = h(x) . g(r);


