The map implementation probably passes LI the argument list (<data>, <index>, <dataList>). The behavior is "as-intended" . Variable arity of LI lets you write DIV(SPAN(), A()), which is common.
I'm tempted to say that the solution is something like
A) a "single"/first combinator:
['a','b'].map(single(LI))
B) Smarter LI that detects map
LI can look at the call chain or arguments to see if that's what is going on.
I'm guessing A >> B because there are many implementations of map and map-like constructs out there.
- Leo