[m-users.] Compiler bug found?

Volker Wysk post at volker-wysk.de
Fri Sep 23 22:22:37 AEST 2022


Hi

This program segment:


:- pred split_into_fragments(
    pred(list(P), list(P), list(P))::
         pred(in(non_empty_list), out(non_empty_list), out) is det,
    list(P)::in(non_empty_list),
    list(list(P))::in,
    list(list(P))::out(non_empty_list))
is det.

split_into_fragments(Pred, Paras@[_|_], Akku, Frags) :-
    Pred(Paras, Frag, Rest),
    append(Akku, [Frag], Akku1),
    (
        Rest = [],
        Frags = Akku1
    ;
        Rest = [_|_],
        split_into_fragments(Pred, Rest, Akku1, Frags) % line 333 is here
    ).

:- pred append1(list(T), list(T), list(T)).
:- mode append1(in(I), in(non_empty_list), out(non_empty_list)) is det.
append1([], Ys, Ys).
append1([X | Xs], Ys, [X | Zs]) :-
    append1(Xs, Ys, Zs).




Causes this compiler error:


serialiser.m:333: In clause for
serialiser.m:333:   `split_into_fragments((pred(in((list.non_empty_list)),
serialiser.m:333:   out((list.non_empty_list)), out) is det),
serialiser.m:333:   in((list.non_empty_list)), in,
serialiser.m:333:   out((list.non_empty_list)))':
serialiser.m:333:   mode error: argument 5 did not get sufficiently
serialiser.m:333:   instantiated.
serialiser.m:333:   Final instantiatedness of `Frags' was `ground',
serialiser.m:333:   expected final instantiatedness was
serialiser.m:333:     named inst list.non_empty_list
serialiser.m:333:     which expands to
serialiser.m:333:       bound(
serialiser.m:333:         '[|]'(ground, ground)
serialiser.m:333:       ).



What irritates me with this error message, is that it says "argument 5", but
split_into_fragments has only 4 arguments. Looks like a compiler bug to me,
or isn't it ---?


Cheers,
Volker
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part
URL: <http://lists.mercurylang.org/archives/users/attachments/20220923/945ab30a/attachment.sig>


More information about the users mailing list