+--- Return a matching iterator for the given value. The iterator will return
+-- one token per invocation, the tokens are separated by whitespace. If the
+-- input value is a table, it is transformed into a string first. A nil value
+-- will result in a valid interator which aborts with the first invocation.
+-- @param val The value to scan (table, string or nil)
+-- @return Iterator which returns one token per call
+function imatch(v)
+ if v == nil then
+ v = ""
+ elseif type(v) == "table" then
+ v = table.concat(v, " ")
+ elseif type(v) ~= "string" then
+ v = tostring(v)
+ end
+
+ return v:gmatch("%S+")
+end
+