module underscore open prelude open prelude.list array_prototype = do! `Array.prototype.forEach` each: -- The cornerstone, an **each** implementation. -- Handles objects implementing **forEach**, arrays, and raw objects. a -> (b -> c) -> d -> e each(obj, iterator, context) = var fe = array_prototype.forEach do! \ when object? fe && do! `obj.forEach === fe` = obj.forEach iterator | when number? obj.length = var f i = yield iterator.call context (get obj i) i obj for [0 .. obj.length] \i = f i | = iterator.call