[m-dev.] shims

Peter Wang novalazy at gmail.com
Fri Sep 12 10:38:16 AEST 2014


On Thu, 11 Sep 2014 17:26:04 +1000, Peter Wang <novalazy at gmail.com> wrote:
> 
> Ideally you could update code immediately but maintain a fallback for
> older libraries.  I don't think there is a way to do it currently, so
> perhaps it is time for another pragma, e.g.
> 
>     :- pragma shim(p/1, other.p/1).
> 
>     p(X) :- ...

This could not cope with predicates which just have their arguments
reordered (hopefully a rare occurrence).

Perhaps the user could provide multiple definitions of a predicate,
and the compiler uses the first definition that typechecks.

    :- pred singleton_set(T::in, set(T)::out) is det.

    :- pragma alternatives(singleton_set/2,
	[singleton_set_new, singleton_set_old]).

    singleton_set_new(X, Set) :- set.singleton_set(X, Set).
    singleton_set_old(X, Set) :- set.singleton_set(Set, X).

Some shims may require helper predicates.  The compiler would need to
ignore helper predicates which are not used anywhere except in unused
alternatives.

Peter



More information about the developers mailing list