[mercury-users] Higher-order unification question

Mark Brown mark at csse.unimelb.edu.au
Wed Feb 28 10:28:28 AEDT 2007


On 27-Feb-2007, doug.auclair at logicaltypes.com <doug.auclair at logicaltypes.com> wrote:
> Dear Mark, you wrote:
> 
> >I agree this would be an improvement.  Fergus posted something a while ago
> >which gave the reason for the restriction, and also outlined how an
> >implementation could overcome this.  See:
> ><http://www.cs.mu.oz.au/research/mercury/mailing-lists/mercury-users/mercury-users.200509/0024.html>
> 
> While the example may work for simple function application of ground terms,
> I've been having difficulty formatting an instance of a pred that takes a higher
> order pred argument.  My attempted
> 
> :- typeclass my_apply(T1, T2, T3) <= (T1 ->T2, T3) where [
>     func my_apply(T1, T2) = T3
> ].
> 
> :- instance my_apply(pred(pred(A, B, C), D, E, F, G), pred(H, I, J), pred(K, L, M, N)) where [
>     my_apply(Pred, Arg) = (pred(P::in, Q::out, R::in, S::out) is det)
> ].
> 
> met with contempt by the compiler:
> 
> test_series.m:019: Error: types in instance declarations must be functors with distinct variables as arguments: my_apply(pred(pred(_1, _2, _3), _4, _5, _6, _7), pred(_8, _9, _10), pred(_11, _12, _13, _14)).
> 
> This error is strange to me, because all the variables /are/ distinct

Not all *arguments* are distinct variables, though.  The `pred(_1, _2, _3)'
argument is the showstopper in this case, since it isn't a variable.

Cheers,
Mark.

--------------------------------------------------------------------------
mercury-users mailing list
Post messages to:       mercury-users at csse.unimelb.edu.au
Administrative Queries: owner-mercury-users at csse.unimelb.edu.au
Subscriptions:          mercury-users-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the users mailing list