# Meta predicates and name overriding

**URL:** <https://swi-prolog.discourse.group/t/meta-predicates-and-name-overriding/7073>\
**Category:** General\
**Created:** [December 15, 2023, 9:53pm UTC](https://swi-prolog.discourse.group/t/meta-predicates-and-name-overriding/7073 "2023-12-15T21:53:20Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![esad](https://yyz2.discourse-cdn.com/free1/user_avatar/swi-prolog.discourse.group/esad/32/884_2.png) [@esad](https://swi-prolog.discourse.group/u/esad)\
**Post date:** [December 15, 2023, 9:53pm UTC](https://swi-prolog.discourse.group/t/meta-predicates-and-name-overriding/7073/1 "2023-12-15T21:53:20Z")

</div>

Hi, consider this simple module:

```prolog
:- module(foo, []).

member(X, Y) :- throw(wrong).

:- meta_predicate test(0).
test(Goal) :- call(Goal).

```

From toplevel, I now try `use_module(foo), foo:test(member(1, [1,2]))` and surprisingly get an exception. Is there a way to have a meta predicate see the same binding that the caller has, as calling `member/2` after `use_module(foo)` from the top level actually correctly calls `lists:member/2`.

I am using SWI-Prolog 9.1.21, but behaviour is the same on 9.0.4. Also I tried using `:`, `?` as specifier for the meta\_predicate without any effect.
