@function __ary-function($args...) {
    $function: __this('function');
    $n: __this('n');
    $args: __take($args, $n);

    @return __exec($function, $args...);
}


@function __ary($function, $n: 1, $guard: null) {
    @if not __is-function($function) {
        @return '__noop';
    }

    $n: if($n >= 0, $n, 0);
    $_: __scope((
        'function': $function,
        'n': $n
    ));
    $ary-function: __bind('__ary-function');
    $_: __scope(false);

    @return $ary-function;
}


/// Creates a function that accepts up to `$n` arguments ignoring any
/// additional arguments.
///
///
/// @access public
/// @group Function
/// @param {Function} $func The function to cap arguments for.
/// @param {number} $n [1] - The arity cap.
/// @returns {Function} Returns the new function.
/// @example scss
///
/// $foo: _map(('6', '8', '10'), _ary(_parse-int, 1));
/// // => (6, 8, 10)

@function _ary($args...) {
    @return call(get-function('__ary'), $args...);
}
