[mercury-users] dependent types with mercury

Chris King colanderman at gmail.com
Fri Apr 8 01:06:14 AEST 2011

Hi Vladmir, glad to see my post is generating some conversation!

On Thu, Apr 7, 2011 at 10:10 AM, Vladimir Gubarkov <xonixx at gmail.com> wrote:
> And thought, I could try to implement smth like even- (odd-) sized list
> using appropriate modes.

You can indeed do this.  The only "gotcha" is that the ---> shorthand
for inst definitions isn't as clever as you'd like.  What you wrote:

> :- inst even_list ---> [] ; [ground,ground|even_list]. % YYY

expands to this:

:- inst even_list ---> [] ; [ground | [ground|even_list]].

The ---> shorthand only works for the top-level constructors; so
Mercury thinks that the inner list cons is an inst rather than a
constructor.  To fix this you can write instead:

:- inst even_list ---> []; [ground | bound([ground | even_list])].

Then your code will compile as expected.  I've tested with a couple
functions that consume pairs of elements and it seems to work, but let
me know if you have any trouble.

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