Edit in JSFiddle

var _=ishml.Template
var example1=_`<ul>${_`<li>${_.cycle().tag("li")}</li>`.per("li")}</ul>`
var data={li:[{value:"cat"},{value:"dog"},{value:"bird"}]}
example1.populate(data)

var ul=(...data)=>_`<ul>${_`<li>${_.cycle().tag("li")}${tags=>tags.li.data.list?ul(tags.li.data.list):""}</li>`.per("li")}</ul>`.populate({li:data.flat()})

var example2=ul([{value:"cat",list:[{value:"worried",list:["meow","hiss"]},{value:"happy",list:["purr"]}]},{value:"dog",list:["bark","growl"]},{value:"bird"}])

var demo=function()
{
   example1.say().replace("#paragraph1")
   example2.say().replace("#paragraph2")

}