public function loopable($subject)
    {
        // Only difference vs container() is that non-Traversable ArrayAccess
        // doesn't pass here.
        return is_array($subject) ? 'array' : (
            $subject && is_object($subject) ? (
                $subject instanceof \Traversable ? (
                    $subject instanceof \ArrayAccess ? 'arrayAccess' : 'traversable'
                ) : (
                    $subject instanceof \ArrayAccess ? false : 'object'
                )
            ) : false
        );
    }