*! @dl *! @item function *! @[fun] is called for each element. It gets the current *! element as the first argument and @[extra] as the rest. The *! result of the call is collected. *! *! @item object *! @[fun] is used as a function like above, i.e. the *! @[lfun::`()] method in it is called. *!
*! @item array
*! Each element of the @[fun] array will be called for each
*! element of @[arr].
*! @item multiset *! @item mapping *! @[fun] is indexed with each element. The result of that is *! collected. *! *! @item "zero or left out" *! Each element that is callable is called with @[extra] as *! arguments. The result of the calls are collected. Elements *! that aren't callable gets zero as result. *!