Let's begin with a simple model:

${message}

Cool, now get into the first model. This implements a scalar, list, and hash as a single class. Let's try some tests...

${data}

Now as a list...

<#foreach item in data>${item}

Index into a list...

${data[ 1 ]}

List size is: ${data.size}

List size is: ${data["size"]}

Now, again, as a hash. First using dot notation, then using [] notation:

${data.selftest}

${data["selftest"]}

Now for the tricky stuff... use a model to index into another model...

${test}

${data[ test ]}

${self}

${data[ self + "test" ]}

Same thing, this time a List index...

${zero}

${data[ zero ]}

${data[ zero + 1 ]}

Now, do the same recursively...

${data}

${data.model2}

${data.model2( "test" )}

${data.model2( data, data.selftest, message )}

Does this really not work?

${data[ 10 ]}

${data[ 10 ].selftest}

${data[ 10 ].message}

(Again, with Hashes)

${data.nesting1.nested}

${data.nesting1.nested.selftest}

${data["nesting1"].nested}

${data["nesting1"].nested["selftest"]}

${data["nesting1"]["nested"]["selftest"]}

As I suspected! (Manual on Expressions needs updating.)

Second test on list size

${data.one.size}

${data.one["size"]}