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

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

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

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