public static function toLeftFoldable($input)
    {
        Arguments::define(Boa::leftFoldable())->check($input);

        if ($input instanceof LeftFoldableInterface) {
            return $input;
        }

        if (is_array($input) || $input instanceof ArrayObject) {
            return static::toList($input);
        }

        if ($input instanceof Traversable) {
            return new TraversableLeftFoldable($input);
        }

        throw new CoreException('Unable to build LeftFoldable');
    }