/** * @param callable $filter * @param callable|array|null $list * @return callable */ function list_filter_key_dg($filter, $list = null) { if (null === $list) { $list = tuple_get(); } elseif (is_array_list($list)) { $list = return_dg($list); } else { debug_assert_type($list, 'callable'); } debug_assert_type($filter, 'callable'); return function () use($list, $filter) { $args = func_get_args(); $list = call_user_func_array($list, $args); return list_filter_key($list, $filter); }; }
/** * @param mixed $return * @param callable|null $apply * @return callable */ function return_dg($return, $apply = null) { if (null !== $apply && debug_assert_type($return, 'array')) { return function () use($apply, $return) { call_user_func_array($apply, $return); }; } else { return function () use($return) { return $return; }; } }
/** * @param string $string * @return callable */ function ctype_special_extra($string) { debug_assert_type($string, 'string'); return str_all($string, str_contains_dg(tuple_get(), '-_ []{}<>~`+=,.;:/?|')); }
/** * @param callable $object * @param string|callable $what * @return callable */ function object_get_dg($object, $what) { if (is_string($what)) { $what = return_dg($what); } if (debug_assert_type($object, 'callable') && debug_assert($what, 'callable')) { return function () use($object, $what) { return object_get($object(), $what()); }; } else { return function () { return null; }; } }