This is how an high level language such as erlang can be very efficient at printing out strings: native language support for strings embedded in lists. That way a template engine doesn't have to allocate memory and copy every time it needs to prepend or append to strings together. Just wrap them in another list.
The usage and the steps to use EEx.Engine are really underdocumented IMO. I've tried to implement custom syntaxes for LiveView several times and ended up just copy-pasting and constructing the relevant structs manually.
This is how an high level language such as erlang can be very efficient at printing out strings: native language support for strings embedded in lists. That way a template engine doesn't have to allocate memory and copy every time it needs to prepend or append to strings together. Just wrap them in another list.
IO.puts([[ "this", [ "is", [ "an" ]]] | "iolist" ])