[m-users.] Higher order type with existential quanitfication

Volker Wysk post at volker-wysk.de
Mon Oct 23 19:32:51 AEDT 2023


Am Montag, dem 23.10.2023 um 19:17 +1100 schrieb Zoltan Somogyi:
> On 2023-10-22 22:54 +11:00 AEDT, "Volker Wysk" <post at volker-wysk.de> wrote:
> > I have a predicate which takes an existentially quantified type as one of
> > its arguments.
> 
> By this, I presume you mean a predicate that *returns*
> a value of an existentially quantified type.

No, it should take an existentially quantified value as its input argument
and return a normal value. This input argument needs to have a typeclass
constraint. I want the predicate to be applied to all members of a
heterogenous list. The (non-existential) results are to be collected and
returned as an ordinary list.

> 
> > This predicate I want to pass to another predicate. I'm
> > puzzled about how to declare this.
> 
> You can't; Mercury does not support this. What you can do instead
> is wrap up the existentially typed output value in a function symbol,
> using a type like this:
> 
> :- type het
>    --->    some [T] het(T) => att(T).
> 
> You should be able to use a predicate that returns a value of this type
> to construct a hetlist.

See above.

Cheers,
Volker


More information about the users mailing list